如何从bash脚本

时间:2018-01-16 11:10:58

标签: python linux bash shell

我正在尝试了解如何从bash脚本访问python脚本的返回值。

通过一个例子澄清:

foo.py

def main():
    print ("exec main..")
    return "execution ok"

if __name__ == '__main__':
    main()

start.sh

script_output=$(python foo.py 2>&1)
echo $script_output

如果我运行bash脚本,则会输出消息“exec main ..”。

如何在 script_output 中存储返回值(执行确定)? 如果我将执行ok 指向stdout,则script_output将捕获所有stdout(所以2 print语句)。

有没有办法实现这个?

谢谢! Alessio的

3 个答案:

答案 0 :(得分:4)

使用sys.exit()模块从脚本中添加适当的退出代码。通常,命令在成功完成脚本后返回0。

import sys

def main():
    print ("exec main..")
    sys.exit(0)

并使用简单的条件在shell脚本中捕获它。虽然默认情况下退出代码为0并且需要明确传递 not ,但使用sys.exit()可以控制在错误情况下返回非零代码,只要适用于理解脚本的某些不一致。< / p>

if python foo.py 2>&1 >/dev/null; then
    echo 'script ran fine'
fi

答案 1 :(得分:2)

您可以通过$?获取上一个命令的输出状态。如果python脚本在没有任何stderr的情况下成功运行,它应该返回0作为退出代码,否则它将返回1或除0以外的任何数字。

#!/bin/bash
python foo.py 2>&1 /dev/null
script_output=$?
echo $script_output

答案 2 :(得分:1)

Bash只包含$?中的返回码,因此您无法使用它来打印python return中的文本。 我的解决方案是在python脚本中写入stderr,接下来只打印bash中的stderr:

import sys


def main():
    print ("exec main..")
    sys.stderr.write('execution ok\n')
    return "execution ok"

if __name__ == '__main__':
    main()

击:

#!/bin/bash

script_output=$(python foo.py 1>/dev/null)
echo $script_output

输出:

execution ok