我用python呼叫外部程式,發現不好使,我的目標是,呼叫的外部程式就讓它在那里獨自運行,和宿主程式完全無關的兩個程式。但我測驗,卻達不到我想要的效果。
為了方便下面的敘述,python程式稱為p程式,被呼叫的程式稱為c程式,呼叫的時候帶有引數,如下:
exePath :c程式的路徑
parString:引數字串
我測驗了幾個種方式,結果如下所示:
os.execv(exePath, parString), p程式會關閉,c程式可以啟動,但獲取不到正確的引數
os.execl(exePath, parString), 同上
os.execle(exePath, parString),c程式沒有運行,p程式崩潰
os.execlp(exePath, parString), p程式會關閉,c程式可以啟動,但獲取不到正確的引數
os.execvp(exePath, parString),同上
os.execlpe(exePath, parString),c程式沒有運行,p程式崩潰
os.startfile(exePath + " " + parString),同上
os.system(exePath + " " + parString),c程式可以正常運行,但在c程式結束之前,p程式無回應
從這個測驗結果,最接近目標的就是最后一個,os.system()了,但是在c程式結束之前,p程式無法繼續運行,這就很不好了。
不知道有沒有哪個介面可以達到我的目的,或者說,根本就沒有這樣的介面?
uj5u.com熱心網友回復:
可以嘗試一下用多執行緒解決,新開一個執行緒去呼叫os.system(xxxx)。不要在主執行緒中直接去執行os.system這樣試一試看看能不能解決p程式無回應的問題
uj5u.com熱心網友回復:
這樣應該是沒有問題的,只是想一個小功能,不想弄得那么麻煩,而且如果使用執行緒,那在c程式結束之前關閉了p程式,那c程式估計也會被強制關閉
uj5u.com熱心網友回復:
剛看到樓主的貼子,已經過去幾個月,估計樓主已經解決,為了使帖子完整,我回答一下:os.system(exePath + " " + parString),c程式可以正常運行,但在c程式結束之前,p程式無回應
主程式p無回應的原因是,os.system()需要等子程式c完成后,才能回傳主程式p;
所以樓主需要用另外的subprocess.Popen()方法:
import subprocess
subprocess.Popen(exePath + " " + parString) c程式可以正常運行,而且p程式可繼續
#print("確認回傳p主程式") #除錯陳述句
uj5u.com熱心網友回復:
開工時我試試再說。
這個問題一直沒有解決,因為我的這個目標不是必需的,只是想把多個工具聯合起來用,使整個作業流程上更方便一些,所以一直也沒有針對它做更多的研究
uj5u.com熱心網友回復:
我也遇到了相同的問題, 用下面這個可以解決.#非阻塞式呼叫
#filename 為字串檔案路徑
from subprocess import Popen
process=Popen(args=filename,shell=True)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/8660.html
上一篇:搜不到解決辦法
下一篇:fadsfas
