我试图在一个单独的过程中从主python程序中打开python脚本。
现在,让我们简单地说,“主程序”是一个PyQt4图形用户界面程序,而“脚本”是我试图从我的主程序运行的脚本(在一个单独的文件中)。
为什么?
我知道subprocess.Popen()、subprocess.call()和os.system()可以通过命令行打开文件,但是当它们打开一个具有无限循环的脚本时,主程序就会挂起并崩溃。
我也知道我可以使用QtCore.QCoreApplication.processEvents()来保持主程序运行,但这在我的情况下是行不通的。
因此,我认为保持脚本和主程序正确运行的最佳解决方案是有单独的进程。
如何以一种不会冻结我的程序的方式在单独的进程中打开script.py文件或。
发布于 2015-09-10 22:07:33
在Python中调用外部命令可能就是你要找的东西。作者完美地描述了如何启动不同的python脚本,在主程序关闭时继续运行。
发布于 2016-05-11 14:56:27
不要将python脚本作为子进程运行,而是导入相应的模块并调用所需的函数。如果需要在单独的进程中运行Python代码,可以使用multiprocessing
multiprocessing.Process(target=infinite_loop, args=['arg 1', 2]).start()相关:在python脚本中使用子进程调用具有输入的python脚本.
为了避免“冻结”GUI,不要在GUI线程中调用长时间阻塞的函数。要么使用线程,要么使用异步。API (这里是调用,在不阻塞GUI的情况下从子进程读取输出)。
Popen()只启动子进程,而不等待退出。如果Popen()“冻结”了你的程序,其他的东西就坏了。这是在子进程的开始/结束时启动/停止tkinter进度条的代码示例。
Qt有自己的API: QThread,QProcess,可以用来运行子进程的信号。相关:如何在子进程期间和之后进行操作.
https://stackoverflow.com/questions/32509261
复制相似问题