python stdout上的非块读取失败

时间:2019-07-10 07:09:54

标签: python subprocess nonblocking

我希望能够将pdb用作子进程,输入调试操作符,并获取其输出。并且我发现fcntl可能会有所帮助,但令我惊讶的是,它适用于gdb等其他程序,但是当cmd为“ python”或[“ python”,“-m”,“ pdb”,“ computer.py” ],这将不起作用。

我将cmd替换为'gdb'或其他程序,所有这些都可与fcntl一起使用。 但仅在cmd与python相关时失败。

Popen(['python','-m','pdb','computer.py'],stdin = PIPE,stdout = PIPE,shell = False)

标志= fcntl(p.stdout.fileno(),F_GETFL) fcntl(p.stdout.fileno(),F_SETFL,标志| O_NONBLOCK)

预期结果是我可以正确获得标准输出。

1 个答案:

答案 0 :(得分:0)

加上“ -u”参数。 -u:无缓冲的二进制stdout和stderr;也PYTHONUNBUFFERED = x          有关与'-u'相关的内部缓冲的详细信息,请参见手册页。