使用fabric运行远程命令不会分离stdout和stderr流

时间:2015-03-12 21:30:16

标签: python fabric

我的主目录中有一个像这样的python文件

import sys

sys.stdout.write('THIS IS STDOUT\n')
sys.stdout.flush()
sys.stderr.write('THIS IS STDERR\n')
sys.stderr.flush()

当我运行这个python文件时,我按预期输出到stdout / stderr。

现在,我有以下fabfile:

from fabric.api import run, task

@task
def my_task(cmd):
    run(cmd)

当我运行任务时,两行都被报告为来自stdout:

$ fab --host localhost my_task:'python foo.py'
[localhost] Executing task 'my_task'
[localhost] run: python foo.py
[localhost] out: THIS IS STDOUT
[localhost] out: THIS IS STDERR
[localhost] out: 


Done.
Disconnecting from localhost... done.

为什么织物管stderr进入stdout?查看here stderr行应该err:加上out,而不是stderr。此外,在那里添加一些调试语句,我可以看到有一个对象设置为观看err:;但它只是没有得到任何数据。有没有办法改变这一点,以便错误行在它们前面得到{{1}}?

1 个答案:

答案 0 :(得分:0)

只需停用combine_stderr

run(cmd, combine_stderr=False)