2015-09-10 191 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

相關問題