簡體   English   中英

Bash將字符串參數傳遞給python腳本

[英]Bash pass string argument to python script

我有一個bash腳本,它從環境中讀取變量,然后將其傳遞給python腳本,如下所示

#!/usr/bin/env bash

if [ -n "${my_param}" ]
then
    my_param_str="--my_param ${my_param}"
fi

python -u my_script.py ${my_param_str}

對應的python腳本如下所示

parser = argparse.ArgumentParser(description='My script')
parser.add_argument('--my_param',
                    type=str,
                    default='')

parsed_args = parser.parse_args()
print(parsed_args.description)

我想提供帶有破折號字符“ Some-string”的字符串作為參數,但是它不能通過bash腳本工作,但是直接通過命令行調用可以。

export my_param="Some -- string"
./launch_my_script.sh

給出錯誤的unrecognized arguments: -- stringpython my_script.py --my_param "Some -- string"效果很好。 我嘗試使用nargs並以這種方式轉義my_param_str="--my_param '${my_param}'" ,但兩種解決方案均無效。 這種情況下有任何解決方法嗎? 還是不同的方式該如何處理?

您的bash需要如下所示:

if [ -n "${my_param}" ]
then
    my_param_str="--my_param \"${my_param}\""
fi

echo ${my_param_str}|xargs python -u my_script.py

否則,將不會保留參數字符串周圍的引號,並且“ Some”,“-”和“ thing”將作為三個單獨的參數傳遞。

對於有限的示例,您基本上可以使用以下方法獲得相同的行為

arg = os.environ.get('my_param', '')

其中要get的第一個參數是變量名稱,第二個參數是在var不在環境中時使用的默認值。

分配Bash字符串變量時,不會保留在字符串周圍寫的引號:

$ export my_param="Some -- string"
$ echo $my_param
Some -- string

在使用變量創建my_param_str時,需要再次將引號my_param_str

my_param_str="--my_param \"${my_param}\""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM