我編寫了一個程序(myProg.py),它使用子進程模塊通過運行函數運行其他python程序。我注意到這些其他python程序中的輸入(arg)語句中的arg沒有顯示到控制檯(stdout),而print(args)中的args顯示正確。這隻發生在我通過控制檯運行我的程序時。當我通過LiClipse運行我的程序時,不會發生這種情況。python subprocess.run with stderr = subprocess.PIPE重定向輸入(文本)
這裏是複製這種情況下,最簡單的方法:
使用Python 3.6.2和Windows 10
- 創建一個Python程序包含以下兩行並保存爲someProgram.py:
a = input("Enter anything") print("a has: " + a)
- 開放CMD,類型:蟒
- 類型:進口子
- 類型:subprocess.run([ 「蟒」, 「path..to..someProgram.py」],標準錯誤= subprocess.PIPE)
- 否ouptut到目前爲止,解釋器正在等待輸入......鍵入內容並按Enter鍵。
- 您將看到print語句的輸出。
如果刪除stderr = subprocess.PIPE,您將看到正確的輸出。
現在,將步驟2 & 3中的代碼保存到另一個文件中,在與someProgram.py相同的文件夾中將其命名爲myProg.py。從LiClipse運行myProg.py。你會發現myProg.py運行正常,併產生正確的輸出。
我的問題是:
- 爲什麼這個問題subprocess.run發生
- 我怎樣才能解決這個問題
- 爲什麼會有通過命令行,並通過IDE運行的代碼之間的差異。
感謝您指出錯誤報告。我正在使用Windows,所以我將不得不下載並使用pyreadline。您是否知道另一個與操作系統無關的解決方法? –
或者,您可以自己打印提示標準輸出,更新。 – georgexsh
感謝georgexsh。不幸的是,這不符合我的要求。 –