繁体   English   中英

Python function 从 Bash 脚本执行时返回不同的值

[英]Python function returns different values when executed from a Bash script

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

import os

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

if __name__ == '__main__':
    test_exit()

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

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

Line 2.

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

ubuntu@ip-172-31-9-235:~$ echo $?
17

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

#!/bin/bash

    Exit_code=$(python3 Test_exit.py)
    echo $Exit_code 

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

ubuntu@ip-172-31-9-235:~$ ./Test_exit.sh
Line 1. Line 2.

不仅没有回显“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"

命令替换$(...)不返回退出代码,它捕获 output。 使用$? 检查退出代码。

output=$(python3 Test_exit.py)
exit_code=$?

要获得准确的 output,您需要将变量双引号:

echo "$Exit_code"

如果没有引号,变量会被扩展并进行分词,因此 output 中的每个单词都被视为echo的单独参数,从而导致空格减少为单个空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM