Python 函数 returns 从 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"
命令替换 $(...)
不会 return 退出代码,它会捕获输出。使用 $?
检查退出代码。
output=$(python3 Test_exit.py)
exit_code=$?
要得到准确的输出,需要双引号变量:
echo "$Exit_code"
没有引号,变量会被扩展并进行分词,因此输出中的每个词都被视为 echo
的单独参数,从而将空格减少为单个空格。
我有一个示例 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"
命令替换 $(...)
不会 return 退出代码,它会捕获输出。使用 $?
检查退出代码。
output=$(python3 Test_exit.py)
exit_code=$?
要得到准确的输出,需要双引号变量:
echo "$Exit_code"
没有引号,变量会被扩展并进行分词,因此输出中的每个词都被视为 echo
的单独参数,从而将空格减少为单个空格。