p.stdout.read()在我的Python 3代码中不起作用

时间:2013-12-21 23:16:47

标签: python subprocess stdout

我尝试使用MAC OS中的子进程模块创建子进程。以下是我的代码:

import subprocess

p = subprocess.Popen("app",
        stdin = subprocess.PIPE,
        stdout = subprocess.PIPE,
        stderr = subprocess.PIPE,
        shell = True)
p.stdin.write(bytes("3\n", "ascii"))
p.stdin.write(bytes("4\n", "ascii"))
print(p.stdout.read())

应用程序的源代码是:

#include <iostream>

using namespace std;

int main()
{
    int x, y;
    cout << "input x: " << endl;
    cin >> x;
    cout << "input y: " << endl;
    cin >> y;
    cout << x << " + " << y << " = " << x + y << endl;

    return 0;
}

当我执行python代码时,输​​出为:

b''

为什么输出是奇怪的字符串?

1 个答案:

答案 0 :(得分:3)

输出b''表示“空字节字符串”。

这是因为没有stdout输出要传递,因为您的子进程尚未成功启动。

如果我将子流程打开为"./app",那么您的示例可以根据需要使用,但如果我只是说"app"则不行。可能这是因为,在类似unix的系统上(与Windows不同),默认情况下当前工作目录不在shell路径上,因此根本找不到"app"

如果你说过

print(p.stderr.read())
然后它可以告诉你问题本身是什么。