子流程不提供 Flow 的输出
Subprocess does not give output with Flow
我正在尝试从 python 脚本调用 facebook/flow 命令。它没有给出预期的 result
。 result
变量是 (b'', None)
.
p = subprocess.Popen(["/usr/local/bin/flow", "--help"], stdout=subprocess.PIPE)
result = p.communicate()
print(result)
我在 Mac OS X Yosemite 上安装了 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)
对此行为有任何说明吗?
很有可能,当你执行命令时 -
/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()
returns 格式的元组 - (stdout, stderr)
- 因此元组中的第二个元素将包含您需要的数据。
我正在尝试从 python 脚本调用 facebook/flow 命令。它没有给出预期的 result
。 result
变量是 (b'', None)
.
p = subprocess.Popen(["/usr/local/bin/flow", "--help"], stdout=subprocess.PIPE)
result = p.communicate()
print(result)
我在 Mac OS X Yosemite 上安装了 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)
对此行为有任何说明吗?
很有可能,当你执行命令时 -
/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()
returns 格式的元组 - (stdout, stderr)
- 因此元组中的第二个元素将包含您需要的数据。