[英]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.