为什么bash的echo会打印出Python函数退出状态为1时的0

3

在一个名为testreturn.py的Python函数中定义如下:

import sys
def main():
    sys.exit(1)

当在scrip.sh中定义的bash函数被调用时:

#!/bin/bash
function test()
{  
   python testreturn.py
   echo $?
}

为什么下面的命令:
`test`
会输出
`0`
我希望这个bash函数可以输出python脚本的退出码。

3
你的 Python 脚本从未调用 main() 函数,因此 sys.exit(1) 永远不会发生,所以它只是在脚本末尾结束并默认返回 0。 - abarnert
1
我不会使用名称“test”来命名shell函数(或别名、脚本等)。这是一个重要的内置命令的名称,覆盖它可能会导致其他脚本以非常奇怪的方式失败。 - Gordon Davisson
2个回答

5

因为您定义了 main() 函数,但从未调用它。代码正常结束(到达文件末尾)并且返回码在这种情况下为0。


4
因为 Python 默认不会调用 main,所以你需要显式地调用它。
你需要:
import sys
def main():
    sys.exit(1)

if __name__ == "__main__":
    main()

1
非常简单。感谢所有的回答。选择这个是因为它包含了解决方案的代码。 - Dan Cook

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接