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.
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.
- Old
- New
p = QProcess()
p.start("python dummy_script.py")
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 — (PyQt5 Edition) The hands-on guide to making apps with Python — Over 10,000 copies sold!