簡體   English   中英

Python不從子進程Popen exe文件中檢索stdout

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM