python - python 中的进程 - 获取非终止进程的标准输出

标签 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呢?也就是说,如果我向标准输入输入“1”,我将期望立即从标准输出获取“1”,而进程尚未终止。

<小时/>

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

  1. 使用subprocess.Popen,将子进程的stdout或stdin当作一个文件,写入stdin(需要'\n'),并且使用 readline

  2. 从标准输出读取
  3. 使用 pexpect 库。

最佳答案

使用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

关于python - python 中的进程 - 获取非终止进程的标准输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30077975/

相关文章:

python - 为什么 splat 运算符 (*) 只用于方法参数?

python - 如何编写 setup.py 来安装除一个子模块之外的包?

python - 你能从函数、args 和 kwargs 中确定变量将如何分配吗?

python - 如何使用python保存内存、pid和进程

python - 使用子进程导入 SQL 转储

c++ - stderr 的奇怪行为

python - 使用最近的时间连接数据帧并填充特定对象的缺失时间戳

python - 从 ffmpeg 获取实时输出以在进度条中使用(PyQt4,stdout)

c - 在 1 行中将字符串发送到标准输出和套接字的方法

c - 标准输出的缓冲区处理