python - 在 Python 中启动一个外部程序并立即返回

标签 python qt pyqt

<分区>

Possible Duplicate:
how to call a program from python without waiting for it to return

我正在编写需要启动外部 Windows 可执行文件的 PyQt 程序。那时 Python 程序应该继续运行,不需要与它启动的 exe 文件有任何联系。

我尝试了几种变体,例如:

process = subprocess.Popen(["vncviewer.exe"]); process.communicate()
subprocess.call("vncviewer.exe")
os.system("vncviewer.exe")
os.system("vncviewer.exe&")
os.system("start vncviewer.exe")

等等

使用几乎任何策略,我都可以成功运行程序,但 Python 脚本随后会被阻止,直到程序完成。 GUI 已卡住且无法使用。

如何让 Python 启动一个完全独立且不相关的任务,然后继续运行,以便我可以打开其他程序,甚至结束 Python 脚本而不影响它启动的程序?

最佳答案

PyQt4.QtCore.QProcess.startDetached()在后台独立执行程序:

QProcess.startDetached('vncviewer.exe')

不同于单独的 subprocess.Popen() 对象 as suggested by Dougal ,使用此方法启动的进程即使在调用进程终止后也会继续运行。

在 PyQt4 程序中,QProcess 优先于 subprocess。前者集成到 Qt 事件循环中,并允许通过 Qt 信号与子进程进行异步通信。

关于python - 在 Python 中启动一个外部程序并立即返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12099322/

相关文章:

Python xlrd 命名范围值

python - PyQt4 到 PyQt5 怎么样?

python - 从 cmd Python 运行 Anaconda 环境

python - 如果使用 Python 值随着时间的推移停留在单个值,则使用 NaN 进行更改

c++ - QT分页使用QSqlQueryModel

c++ - QObject::connect: 无法对类型为 'QVector<int>' 的参数进行排队

c++ - QT with MSVC2015 触发多个编译错误

python - PyQT ListView 不响应数据更改信号

python - 使用 QNetworkAccessManager 进行 Qt HTTP 身份验证

python - pandas - 获取每个多索引级别标签行的一小部分