小编Gro*_*mit的帖子

从 Bash 脚本执行时,Python 函数返回不同的值

我有一个示例 Python 文件“Test_exit.py”:

import os

def test_exit():
    print('Line 1.\n')
    print('Line 2.\n')
    exit (17)

if __name__ == '__main__':
    test_exit()
Run Code Online (Sandbox Code Playgroud)

当我使用 Python 执行它时,它按预期工作:

ubuntu@ip-172-31-9-235:~$ python3 Test_exit.py
Line 1.

Line 2.

Run Code Online (Sandbox Code Playgroud)

当我检查返回的错误代码时,它确实按预期打印了“17”:

ubuntu@ip-172-31-9-235:~$ echo $?
17
Run Code Online (Sandbox Code Playgroud)

但是,当我从 Bash 脚本“Test_exit.sh”执行相同的 Python 文件时,事情会有所不同:

#!/bin/bash

    Exit_code=$(python3 Test_exit.py)
    echo $Exit_code 
Run Code Online (Sandbox Code Playgroud)

我希望它回显“17”,但它不会:

ubuntu@ip-172-31-9-235:~$ ./Test_exit.sh
Line 1. Line 2.
Run Code Online (Sandbox Code Playgroud)

它不仅不回显“17”,而且现在打印的两行没有换行...

如果我替换exit (17)sys.exit (17),则不会打印任何内容,甚至不会打印一行中的 2 行...

我的代码有什么问题?是否exit不仅会导致 Python 存在,还会导致 Bash 脚本存在?为什么根据 Python 的调用方式,字符串的打印方式不同?

编辑

为了将来参考,这是@choroba 建议的运行良好的脚本:

#!/bin/bash

    output=$(python3 Test_exit.py)
    Exit_code=$?
    echo "$Exit_code"
    echo "$output"
Run Code Online (Sandbox Code Playgroud)

python bash shell exit-code python-3.x

1
推荐指数
1
解决办法
39
查看次数

标签 统计

bash ×1

exit-code ×1

python ×1

python-3.x ×1

shell ×1