python中的进程 - 获取非终止进程的stdout

时间:2015-05-06 13:17:56

标签: python subprocess stdout

假设有一个程序使用不同的输入产生不同的输出,并且如果输入是特定值则终止。例如,它可以用C ++编写:

int main() {
    int i;
    while(true) {
        cin >> i;
        if (i) cout << i << endl;
        else break;
    }
    return 0;
}

在此程序中,如果键入一个整数,它将在屏幕上打印出来。在您键入0

之前,该程序永远不会终止

然后如何使用Python立即获取对应于stdin的stdout?也就是说,如果我给出一个&#39; 1&#39;进入标准杆,我期望得到一个&#39; 1&#39;从stdout立刻,虽然这个过程还没有终止。

结论:有两种方法可以实现这一点。

  1. 使用subprocess.Popen,将子进程的stdout或stdin视为文件,写入stdin(需要'\n'),并使用readline读取stdout

  2. 使用库pexpect。

1 个答案:

答案 0 :(得分:1)

使用subprocess.Popen()

>>> import subprocess
>>> p = subprocess.Popen(['/your/cpp/program'], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
>>> p.stdin.write('1\n')
>>> p.stdout.readline()
'1\n'
>>> p.stdin.write('10\n')
>>> p.stdout.readline()
'10\n'
>>> p.stdin.write('0\n')
>>> p.stdout.readline()
''
>>> p.wait()
0