簡體   English   中英

Windows 7 64位上的Python子進程 - 當stdout = PIPE時沒有輸出

[英]Python subprocess on Windows 7 64bit - no output when stdout=PIPE

對於另一個關於Python子進程的問題抱歉,但我找不到這個問題的答案。

我遇到一些Python代碼,它在Windows 7 64位上調用子進程。 當子進程的stdout發送到管道時,不會產生任何輸出。 子進程似乎運行和終止沒有問題,它只是不產生任何輸出。

編輯:相同的代碼在WinXP 32位上正常工作,所以我更新了問題標題。

# (listing 1)
from subprocess import *
#cmdline= (a valid command line)
proc = Popen(cmdline,shell=True,stdout=PIPE,stderr=PIPE)
out, err = proc.communicate()
print( out )
print( err )

這給出了輸出

out:

err:

但是,當子進程的輸出未通過管道傳輸時,它會按預期生成輸出:

# (listing 2)
proc = Popen(cmdline,shell=True)
proc.communicate()

這為控制台提供了預期的輸出。

我確信可執行文件實際上是將其輸出寫入stdout。 我有C源代碼,我添加了這一行:

fprintf(stdout, "HELLO");

同樣,在運行清單2時會看到“HELLO”,但不會列出清單1。

我還嘗試制作一個新的C ++可執行文件並從cmdline調用它:

#include <iostream>

int main()
{
    std::cout << "HELLO" << std::endl;
}

同樣的事情仍然發生 - 運行清單2時會看到“HELLO”,但不會列出清單1。

如果我將cmdline設置為'dir',則列表1和列表2都會出現預期的情況 - 目錄內容將打印到控制台。

我嘗試過的其他事情:Python 3.3和Python 2.7(結果相同); bufsize = 0(相同的結果); 檢查proc.returncode(它是0,如預期的那樣); 刪除stderr = PIPE(在這種情況下,列表1按預期給出“err:None”)。

編輯 - 我也嘗試了= proc.stdout而不是帶有相同結果的communic()方法。 Python文檔和其他問題表明,communication()方法是正確的使用方法。

這根本不是Python的問題。 我的防火牆設置已經“沙箱化”了可執行文件,這導致他們的輸出被丟棄而沒有任何警告或錯誤。

防止它們執行會更有意義。 我想我需要使用不同的防火牆軟件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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