在bash脚本中返回Python脚本的退出号和值

时间:2019-02-21 13:48:57

标签: python bash shell

我想从bash脚本执行python脚本,并且要将python脚本的输出存储在变量中。

在我的python脚本中,我打印了一些错误消息,值为0或1

def main (): 
      if condition A :
            sys.stderr.write("FORBIDDEN commit")
            return 1
      else: return 0
sys.exit(main())

这是我的bash脚本:

我使用$?从python脚本获取退出代码+错误值

python  /var/www/svn/TEST/hooks/pre-commit-standard-codeline.py $SVNRepository $SVNTransaction
PYTHONRESULT=$?

echo $PYTHONRESULT >&2     #echo display -->FORBIDDEN commit1


if [ $PYTHONRESULT -ne 0 ];
        then
        echo -e "\n"                                                                 >&2
        echo "=====================================================================" >&2
        echo "Your commit is blocked for the following reasons:"                     >&2
        echo -e "\n"                                                                 >&2
        echo -e ${PYTHONRESULT:0}                                                              >&2
        echo -e "\n"                                                                 >&2
        echo "=====================================================================" >&2
        echo -e "\n"
        exit 1
fi

我的问题是在bash脚本中,我想从错误消息中分割python的退出值,以便可以在echo命令中触发我的结果

我尝试了${PYTHONRESULT:0},但是它总是给我python脚本的退出值

1 个答案:

答案 0 :(得分:3)

您似乎对前进的方向感到困惑。 Python已经将错误消息写入标准错误,并且 year PD PD_thresh y_pseudo 0 2010 0.5 0.7 0.0 1 2011 0.8 0.8 1.0 2 2013 0.9 0.9 1.0 3 2014 NaN 0.7 NaN 代码最终在外壳程序中的return中结束了。

通常,您不需要经常显式检查$?,因为$?if以及朋友会在幕后为您这样做。

也许您正在寻找的只是

while

如果要捕获标准错误,请尝试

if python  /var/www/svn/TEST/hooks/pre-commit-standard-codeline.py "$SVNRepository" "$SVNTransaction"; then
    : all good, do nothing
    pythonresult=0
else
    # error message from Python will already have been printed on stderr
    # use lower case for your private variables
    pythonresult=$?
    cat <<-____eof >&2
        $0: Obnoxiously long error message.
        $0: The longer you make it, the less people will read it
            and the more actually useful information scrolls off the screen.
        $0: Python result code was $pythonresult!!!!11!
____eof
fi
exit $pythonresult

这有点混乱,因为它混合了标准输出和标准错误。

有必要的话,可以将它们分开,但是您的问题和代码看起来实际上对标准输出没有任何期望。