簡體   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