繁体   English   中英

从另一个Python进程中打开另一个Python脚本

[英]Open another Python script from another Python process

我试图在一个单独的过程中从主python程序中打开python脚本。

现在,我们只说“主程序”是PyQt4 GUI程序,“脚本”是我试图从主程序运行的脚本(在单独的文件中)。

为什么?

  1. 因此,脚本在主程序关闭后继续运行

  2. 这样,当脚本运行时,在等待无限循环结束的脚本时,主程序不会冻结。

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

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

因此,我认为保持脚本和主程序正确运行的最佳解决方案是使用单独的进程。

我将如何以单独的过程不会冻结程序的方式打开script.py文件。

您正在寻找在Python中调用外部命令 作者完美地描述了如何启动不同的python脚本,这些脚本在您的主程序关闭时保持运行。

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

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

相关: 使用subprocess在带有python脚本的输入中调用python脚本

为避免“冻结” GUI,请勿在GUI线程中调用长时间阻塞的函数。 使用线程或异步。 API(这是createfilehandler()代码示例,该示例使用createfilehandler()createfilehandler() .after()调用来读取子createfilehandler()输出而不会阻塞GUI )。

Popen()仅启动子进程,并且不等待其退出。 如果Popen() “冻结”了您的程序,则其他程序已损坏。 是在子流程的开始/结束时启动/停止tkinter进度栏代码示例。

Qt有自己的API:QThread,QProcess,可以用来运行子进程的信号。 相关: 在子进程期间和之后如何做事

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM