我正在尝试了解如何从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的
答案 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