如何从bash脚本访问python返回值

2024-05-03 12:25:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解如何从bash脚本访问python脚本的返回值。在

举例说明:

食品

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

if __name__ == '__main__':
    main()

开始.sh

^{pr2}$

如果我运行bash脚本,将打印消息“exec main..”。在

如何将返回值(execution ok)存储在脚本输出中? 如果我将execution ok指向stdout,则脚本输出将捕获所有stdout(因此是2 print语句)。在

有没有办法实现这一点?在

谢谢! 阿莱西奥


Tags: name脚本bash食品returnifmaindef
3条回答

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

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

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

import sys

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

并用一个简单的条件在shell脚本中捕获它。虽然退出代码默认为0,并且需要显式地传递而不是,但是使用sys.exit()可以控制在错误情况下返回非零代码,以了解与脚本的某些不一致。在

^{pr2}$

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()

巴什:

^{pr2}$

输出:

execution ok

相关问题 更多 >