[英]Python not retrieving stdout from subprocess Popen exe file
我知道那里有很多類似的問題,但我真的不知道我做錯了什么。 我想要完成的事情是:從之前從.py
編譯的.exe
文件中讀取stdout
。
這是執行子進程的主程序
from subprocess import Popen, PIPE, STDOUT
runcloud = Popen([r'demo2.exe'], stdout=PIPE)
with runcloud.stdout:
for line in iter(runcloud.stdout.readline, b''):
print(line) ##PRINTS NOTHING ??
這是編譯前的.exe文件(demo2.exe)
import os
try:
print('RESPONSE')
except:
print('no connection')
os._exit(0)
對於一些實現,我需要編譯demo2
和添加的最后一行os._exit()
在 cmd 中運行此.exe
文件時,它確實顯示了打印字符串。 但是無法使用subprocess
從主程序打印
編輯:經過一些評論后,我在沒有編譯文件的情況下運行了代碼,並添加了關鍵字python
,但仍然沒有打印任何內容。 評論:即使我讓它與 py 文件一起運行或只是刪除os._exit(0)
,它仍然不打印任何內容,請注意,我的目錄中沒有其他具有相似名稱的文件。
編輯 - 變通方法:在幾個小時內找到解決方案之后,唯一的變通方法是在exe
文件中編寫一個代碼來保存(我認為我不能將其稱為“重定向”)輸出到另一個文件(如.txt
或像一個簡單的設置數據庫SQlite
,然后在主程序中調用Popen
執行exe
與.wait()
並通過在文件或數據庫讀出寫入的值整理起來。 由於我還沒有弄清楚為什么Popen
沒有在stdout
捕獲print
函數,並且解決方法已經可以在其他問題中找到,我現在就讓這個問題保持開放。
首先,您應該輸入 demo2.exe 的路徑,即如果 exe 與主程序位於同一目錄中,則您的字符串應為r'./demo2.exe'
(如果不是,則為完整路徑)。 然后,嘗試從您的 demo2 文件中刪除 os._exit(0) 調用。 您也可以嘗試對這種類型的調用使用子進程 check_output,它稍微簡化了代碼:
from subprocess import check_output
output = check_output([r'./demo2'])
print(output)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.