Q&A: QProcess.start() is deprecated, what are the alternatives?

Update how you launch subprocesses with arguments
Heads up! You've already completed this tutorial.

A reader wrote in with an interesting problem when trying to launch an external script using QProcess.

When trying to launch another script in a sub-process I got the error: QProcess.start(const QString & command, QFlags<QIODevice::OpenModeFlag> mode) is deprecated. Having checked the documentation it mentioned .start() was obsolete but did not suggest replacement. Do you have any suggestions.

The confusion here comes from the .start() method being overloaded -- it can be called with different signatures (collections of arguments). The .start() method itself is not removed or deprecated, just the signature where .start() is called with a string containing the program and arguments together.

Deprecated members for QProcess List of deprecated methods for QProcess: note that only this signature for .start is deprecated

In the new API you need to instead set the program and arguments separately, with the latter passed as a list of strings -- one item per argument. This is a nicer way to do this -- less prone to errors since it's explicit what each thing you're passing actually is.

python
p = QProcess()
p.start("python dummy_script.py")
python
p = QProcess()
p.setProgram("python")
p.setArguments(['dummy_script.py'])
p.start()

The book has been updated with this new style API.

Create GUI Applications with Python & Qt5 by Martin Fitzpatrick — (PySide2 Edition) The hands-on guide to making apps with Python — Over 10,000 copies sold!

More info Get the book

Well done, you've finished this tutorial! Mark As Complete
[[ user.completed.length ]] completed [[ user.streak+1 ]] day streak

Q&A: QProcess.start() is deprecated, what are the alternatives? was written by Martin Fitzpatrick .

Martin Fitzpatrick has been developing Python/Qt apps for 8 years. Building desktop applications to make data-analysis tools more user-friendly, Python was the obvious choice. Starting with Tk, later moving to wxWidgets and finally adopting PyQt.