我想實現一個python代碼,我需要運行一個外部可執行文件。經過一番研究,我發現subprocess
模塊並嘗試過。然而,當我運行代碼,子進程退出並返回一個CompletedProcess
對象,這是不行的我,因爲我有工作的.exe文件實際上是一個連續節目裏需要輸入,直到它被關閉產生輸出。 (我的程序將發送它的輸入並接收輸出。)使用Python運行連續的.exe文件
所以這段代碼失敗了。
import subprocess
proc = subprocess.run("some.exe", stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
print(proc) # To see what it is.
它捕捉標準輸出中的程序,然後退出,而不是期待新的輸入。
我也有在這裏的術語問題,這個可執行文件我現在用的就是能夠運行,同時仍然能夠收到新的命令的命令,這是所謂的異步或非阻塞?
我的問題,什麼是處理這個正確的方式?在接近這個的地方有很多問題,但我不能確定哪些人正在回答我的問題或以現代的方式回答問題(有很多老問題)。
這樣看來subprocess
模塊經歷與Python 3.6.1一些變化https://docs.python.org/3/library/subprocess.html
因此,這將是最好的,如果你能提供的最新方式的解決方案,或者至少提到新的方式,以及它如何運作。
我的工作在Windows 10,Python的3.6.1
EDIT1:我所遇到subprocess.Popen
,這可能是我所需要的,但我還沒有發現它是如何正確使用。
EDIT2:模塊pexpect
似乎是專爲這些類型的問題,但我如果用這將讓我的時間更容易我不知道。任何建議感激。
可以將這些「輸入」簡單地寫入子流程調用的命令嗎? – JacobIRR
@JacobIRR,是的,原諒我不提,這是一個控制檯應用程序,並直接從stdin接收輸入。我可以直接運行它並測試輸入,我需要我的Python應用程序來代替我。 – Rockybilly
但輸入不是預先確定的,當我在開始時調用程序時,我無法給出所有輸入。 – Rockybilly