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

标签 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''

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

最佳答案

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

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

如果我将子进程打开为 "./app" 但如果我只是说 "app" ,则您的示例对我有用。大概这是因为,在类 UNIX 系统上(与 Windows 不同),默认情况下当前工作目录不在 shell 路径上,因此根本找不到 "app"

如果你说过

print(p.stderr.read())

那么它本身就可以告诉您问题是什么。

关于python - p.stdout.read() 在我的 Python 3 代码中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20724549/

相关文章:

python - 如何使 readline 在 python 子进程中工作?

process - 将进程的标准输出管道传输到另一个标准输出

python - 如何使用 Quart Python 停止将访问日志记录到 stdout

python - Django 数据库路由器无法导入名称连接

python - 使用scrapy抓取页面

java - python子进程调用java类时出错

python - 为什么使用 Python 子进程调用 ssh 会破坏外部 bash 循环

python - 在 os.dup2() 之后重定向标准输出/输入/错误

python - 如何从 SciPy 的层次凝聚聚类中获取质心?

python - 使用 Python 位串测量霍夫曼编码的效率