python fabric run命令返回错误为stdout

时间:2016-11-14 13:54:50

标签: python linux awk fabric

我使用fabric run在另一台主机上执行命令,我想抓住执行命令的stderr。 像这样的结构代码:

canvas

当尾部失败时,result.failed为false,result的值为tail的stderr。面料不会抛出异常。

dynamicElements.eq(i).find('canvas')[0]

我只是想从布料中得到一个中止或警告,知道我的脚本是否失败,但在这种情况下,我无法抓住。

1 个答案:

答案 0 :(得分:0)

由于piping和paramiko的工作方式,fabric只返回管道链中最后一个命令的结果代码。在这种情况下,awk命令返回0(或成功== True)。如果您愿意,可以使用其他结构构造解决此问题:

from fabric.contrib import files
def remoteTask(logfile):
    if not files.exists(logfile):
        raise Exception('%s does not exist!' % logfile)
    with settings(warn_only=True):
        result = run("tail -n4 %s | grep \'[error]\' | awk \'{print $1,$2,$0}\'" % logfile)

有关此原理的更多信息,您可以在此处阅读有关管道的更多信息:http://www.gnu.org/software/bash/manual/html_node/Pipelines.html

您也可以使用

运行命令
set -o pipefail