[英]subprocess.communicate() sending garbage to process?
我在使用subprocess.communicate()的子進程中讀取/寫入stdin / stdout時遇到問題。
這是子進程(在C中)
#include <stdio.h>
int main ()
{
char buf[128];
printf("test\n");
gets(buf);
printf("%s", buf);
return 0;
}
這是python中調用該子程序的程序
import subprocess
proc = subprocess.Popen('./test', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
stdin, stderr = proc.communicate()
print stdin
proc.communicate(stdin)
stdin, stderr = proc.communicate()
print stdin
print stdin
我希望這會打印
test
input was test:
但是,似乎proc.communicate()會導致gets()的EOF,從而導致子應用程序終止。 無論如何,我可以在不發送EOF的情況下與子應用程序進行通信嗎? IE瀏覽器,我想閱讀該應用程序,然后再寫它。
從Popen.communicate()
的文檔中:
發送數據到標准輸入。 從stdout和stderr讀取數據,直到到達文件末尾。 等待進程終止。
這意味着您只能為子流程調用一次communicate()
。
獲得實時輸出可能有些棘手,但是在您的示例中,它並不難,因為您僅嘗試讀取一行。 以下應該工作:
import subprocess
proc = subprocess.Popen('./test', stdin=subprocess.PIPE, stdout=subprocess.PIPE)
outdata = proc.stdout.readline()
print outdata
outdata, errdata = proc.communicate('output was ' + outdata)
print outdata
請注意,我重命名了一些變量,因為子進程的輸出對於Python進程而言並不是真正的stdin。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.