2010-11-24 68 views
2

在python中,我想創建一個子進程並讀寫數據到它的stdio。 可以說我有下面的C程序,只是將其輸入寫入其輸出。如何在不阻塞的情況下在python中使用管道?

#include <stdio.h> 
int main() { 
    char c; 
    for(;;) { 
     scanf("%c", &c); 
     printf("%c", c); 
    } 
} 

在python中,我應該可以使用這個子進程模塊。像這樣:

from subprocess import * 
pipe = Popen("thing", stdin=PIPE, stdout=PIPE) 
pipe.stdin.write("blah blah blah") 
text = pipe.stdout.read(4) # text should == "blah" 

但是在這種情況下,無限期地讀取塊的調用。 我該如何做我想達到的目標?

回答

4

stdout在寫入終端時被行緩衝,但在寫入管道時被完全緩衝,因此您的輸出不會立即被看到。

要衝洗緩衝區,請在每個printf()之後調用fflush(stdout);。另請參閱this question,除了您的子進程是用C編寫的,而this question引用了C99中定義的標準輸入/標準輸出行爲外,其他都相同。

0

我發現了pexpect模塊,它完全符合我的需求。

相關問題