在python中,我想创建一个子进程并读取和写入其stdio数据。 假设我有以下C程序只将其输入写入其输出。
#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"
但是在这种情况下,无限期地调用读取块。 我怎样才能做到我想要实现的目标?
答案 0 :(得分:4)
stdout在写入终端时是行缓冲的,但在写入管道时完全缓冲,因此不会立即看到输出。
要刷新缓冲区,请在每个fflush(stdout);
后调用printf()
。另请参阅this question,除了您的子进程是用C语言编写外,它是相同的,this question引用了C99中定义的stdin / stdout行为。
答案 1 :(得分:0)
我找到了pexpect模块,它完全符合我的需要。