2015-09-10 143 views
0

我想在一个单独的进程中从主Python程序打开一个python脚本。现在让我们说“主程序”是一个PyQt4 GUI程序,“脚本”是脚本(在一个单独的文件中),我试图从我的主程序运行。从另一个Python进程打开另一个Python脚本

为什么?

  1. 所以脚本继续运行主程序被关闭

  2. 后,这样当脚本运行,同时用一个无限循环结束等待脚本我的主程序不冻结。

我知道subproces.Popen()subprocess.call()os.system()可以打开通过命令行的文件,但是当他们打开脚本具有无限循环主程序挂起和崩溃。

我也知道我可以使用QtCore.QCoreApplication.processEvents()来保持主程序运行,但这在我的情况下不起作用。

所以我想最好的解决方案,以保持脚本和主程序正确运行是有指定的过程。

我该如何在分隔过程中打开这个script.py文件,或者以不会冻结我的程序的方式。

+0

没有什么不同的过程,但是你可以使用线程来让两个python脚本在“相同”时间执行 – RandomHash

回答

1

Calling an external command in Python可能是你在找什么。作者完全描述了如何启动不同的python脚本,这些脚本在关闭主程序时保持运行。

+0

使用(Popen,popen,call,os.system)总是冻结程序。现在我使用了最愚蠢的技巧:我使用Popen来运行一个.vbs脚本,该脚本在没有运行我需要的脚本的控制台的情况下打开一个.bat文件。只是愚蠢。 –

0

不要将python脚本作为子进程运行,导入相应的模块并调用所需的函数。如果你需要在一个单独的进程中运行Python代码,你可以使用multiprocessing

multiprocessing.Process(target=infinite_loop, args=['arg 1', 2]).start() 

相关:Call python script with input with in a python script using subprocess

为了避免“冻结”GUI,请不要调用在GUI线程中长时间阻塞的函数。使用线程或异步。 API(这里是tkinter code example that uses createfilehandler() and .after() calls, to read output from a subprocess without blocking the GUI)。

Popen()只启动子进程,并不等待它退出。如果Popen()“冻结”了你的程序,那么别的东西就坏掉了。这里的code example that starts/stops a tkinter progressbar on start/end of a subprocess.

Qt有它自己的API:QThread,QProcess,你可以用来运行子进程的信号。相关:How to do stuff during and after a child process

相关问题