【问题标题】:Failing to read out of a process using subprocess Popen and PIPE无法使用子进程 Popen 和 PIPE 读取进程
【发布时间】:2017-07-24 13:28:26
【问题描述】:

我有下一个用c写的程序:

#include <stdio.h>

int main()
{

while(1)
{

printf("hey\n");

}

return 0;

}

还有这个python中的程序

from subprocess import Popen, PIPE

def main():

    proc = Popen("procname.o", stdin=PIPE, stdout=PIPE, shell=True)

    while True:
        print proc.stdout.read()


if __name__ == '__main__':
    main()

但这条线会阻塞:

proc.stdout.read()

任何想法为什么?有没有人遇到过这种情况?

【问题讨论】:

  • 两个脚本都在执行while True,没有任何time.sleep() 或等效项。也许你在 stackoverflow 中运行?你说的“这条线块”是什么意思?你得到回溯还是什么?
  • 您正在执行.o 文件?对吗?
  • 子进程是否正在向 stderr 写入任何内容?
  • Around - 我的意思是进程开始休眠(阻塞状态,等待函数 read() 返回的输出,这会导致一些系统调用) Rawing - 是的,显然我是 :) Luke伍德沃德 - 我现在就去看看

标签: python subprocess stdout


【解决方案1】:

你有一个无限的while循环,它无限地输出“hey\n”。因此,标准输出正在增长。

如果您使用的是 Unix 系统,您可能希望在可执行文件前添加“./”。像这样,“./procname.o”。

例如,cexample.c

#include <stdio.h>

int main()
{

printf("hey\n");

return 0;

}

编译:gcc cexample.c

在python文件中,pyexample.py

from subprocess import Popen, PIPE

def main():

proc = Popen("./a.out", stdin=PIPE, stdout=PIPE, shell=True)
print proc.stdout.read()


if __name__ == '__main__':
main()

运行:python pyexample.py

输出:

【讨论】:

    猜你喜欢
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多