我的主目录中有一个像这样的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}}?
答案 0 :(得分:0)
只需停用combine_stderr
:
run(cmd, combine_stderr=False)