[英]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: -- string
和python 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.