簡體   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