2017-03-04 72 views
1

我已經下一個程序用C語言編寫的過程中:未能讀出用子POPEN和PIPE

#include <stdio.h> 

int main() 
{ 

while(1) 
{ 

printf("hey\n"); 

} 

return 0; 

} 

,並將該軟件在Python

from subprocess import Popen, PIPE 

def main(): 

    proc = Popen("procname.o", stdin=PIPE, stdout=PIPE, shell=True) 

    while True: 
     print proc.stdout.read() 


if __name__ == '__main__': 
    main() 

但該行塊:

proc.stdout.read() 

有什麼想法爲什麼?有沒有人遇到過這個?

+0

這兩個腳本都在''True''沒有'time.sleep()'或等價物。也許你在運行在stackoverflow? 「這行代碼塊」是什麼意思?你有沒有回溯或什麼? – Arount

+1

你正在執行'.o'文件?是對的嗎? –

+0

[交互式輸入/輸出使用python]可能的重複(http://stackoverflow.com/questions/19880190/interactive-input-output-using-python) – JuniorCompressor

回答

-2

你有一個無限的while循環,無限輸出「hey \ n」。所以,stdout正在增長。

如果您使用的是Unix系統,那麼您可能需要在可執行文件前添加「./」。像這樣,「./procname.o」。

例如,cexample.c

#include <stdio.h> 

int main() 
{ 

printf("hey\n"); 

return 0; 

} 

編譯:GCC cexample.c

在Python文件,pyexample.py

from subprocess import Popen, PIPE 

def main(): 

proc = Popen("./a.out", stdin=PIPE, stdout=PIPE, shell=True) 
print proc.stdout.read() 


if __name__ == '__main__': 
main() 

執行命令蟒pyexample.py

輸出:

hey

+0

你到底在說什麼大聲笑 – DrPrItay