子进程不提供带F的输出

2024-04-25 06:17:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从python脚本调用facebook/flow命令。它没有给出预期的resultresult变量是(b'', None)。你知道吗

p = subprocess.Popen(["/usr/local/bin/flow", "--help"], stdout=subprocess.PIPE)
result = p.communicate()    
print(result)

我已经在我的macosxyosemite上安装了flow,并且可执行文件存在于使用过的目录中。我还安装了R,当我使用下面的代码时,它会产生一个有效的输出( b'b'\nUsage: R [options] [< infile] [> outfile]\n', None)。你知道吗

p = subprocess.Popen(["/usr/local/bin/R", "--help"], stdout=subprocess.PIPE)
result = p.communicate()    
print(result)

为什么subprocess不是只针对flow失败?我错过什么了吗?你知道吗

编辑

使用下面的代码生成预期的输出

p = subprocess.Popen(["/usr/local/bin/flow", "--help"], stderr=subprocess.PIPE)
result = p.communicate()    
print(result)

对这种行为有什么解释吗?你知道吗


Tags: 脚本nonefacebookbinusrlocalstdouthelp
1条回答
网友
1楼 · 发布于 2024-04-25 06:17:50

很可能,当你执行命令时-

/usr/local/bin/flow  help

进程正在将其输出写入stderr,而不是stdout。因此,只有同时通过管道传输stderr输出时,才能获得输出。示例-

p = subprocess.Popen(["/usr/local/bin/flow", " help"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

这将在stdout和stderr中使用管道,然后您可以使用所需的输出。你知道吗

Popen.communicate()返回格式为(stdout, stderr)的元组,因此元组中的第二个元素将包含所需的数据。你知道吗

相关问题 更多 >