A reader wrote in with an interesting problem when trying to launch an external script using QProcess in PyQt5/PySide2.
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.
Why is QProcess.start() showing a deprecation warning?
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 specific signature where .start() is called with a single string containing the program and arguments together.
List of deprecated methods for QProcess: note that only this signature for .start is deprecated
How to fix the deprecated QProcess.start() call
In the new API you need to set the program and arguments separately, with the latter passed as a list of strings — one item per argument. This approach is less prone to errors since it's explicit what each value you're passing actually represents.
Old approach (deprecated single-string signature)
p = QProcess()
p.start("python dummy_script.py")
New approach using setProgram() and setArguments()
p = QProcess()
p.setProgram("python")
p.setArguments(['dummy_script.py'])
p.start()
By using setProgram() and setArguments() separately, you avoid the deprecated single-string signature and make your subprocess calls clearer and more maintainable.
Alternative: pass program and arguments directly to start()
You can also pass the program and arguments as separate parameters directly to .start(), which is the non-deprecated overload:
p = QProcess()
p.start("python", ['dummy_script.py'])
This achieves the same result as the setProgram()/setArguments() approach, but in a single line. Both methods are valid — choose whichever is clearest for your use case.
Summary
The QProcess.start() method is not fully deprecated in PyQt5 or PySide2. Only the single-string overload that combines the program name and arguments into one string is deprecated. To fix the warning, separate the program from its arguments by using either setProgram() and setArguments() before calling .start(), or by passing them as distinct parameters to .start("python", ['dummy_script.py']).
The book has been updated with this new style API.
Bring Your PyQt/PySide Application to Market
Stuck in development hell? I'll help you get your project focused, finished and released. Benefit from years of practical experience releasing software with Python.