我尝试使用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''
为什么输出是奇怪的字符串?
答案 0 :(得分:3)
输出b''
表示“空字节字符串”。
这是因为没有stdout
输出要传递,因为您的子进程尚未成功启动。
如果我将子流程打开为"./app"
,那么您的示例可以根据需要使用,但如果我只是说"app"
则不行。可能这是因为,在类似unix的系统上(与Windows不同),默认情况下当前工作目录不在shell路径上,因此根本找不到"app"
。
如果你说过
print(p.stderr.read())
然后它可以告诉你问题本身是什么。