2015-06-19 76 views
1

我有一個需要運行python腳本的shell腳本。 python腳本可能會傳遞一個參數。轉義序列不能在從腳本運行的python腳本中運行

python pgm32.py $args 

但是,當傳遞的參數有一個轉義序列,或者如果我在引號包住它的Python腳本不能識別它。

舉例說ARGS分別python腳本的sys.argv=['pgm32.py', '"Open', 'drive"'] OR sys.argv=['pgm32.py', '"Open', 'drive"']包含"Open drive"Open\ drive 然後。

但是,當我直接在命令行調用python腳本,並傳遞一個參數,像"Open drive"Open\ drive,該腳本的sys.arv=['pgm32.py', 'Open drive']

我怎樣才能解決這個問題?

+3

您是否嘗試過'pygp32.py「$ args」'? –

+0

'$ args =「」Open Drive「」'或者'args =「\」打開Drive \「」'afaik單引號做別的事情......(或者按照其他評論中的建議,如果args會只有一個項目 –

+0

對不起,我的意思是args字面上包含''Open drive''或'Open \ drive'。 –

回答

-1

這工作:

eval python pgm32.py $args 

更多細節上Setting an argument with bash 感謝@Barmar。

+3

你應該*真的*考慮修改傳遞參數給Python的腳本,而不是採用簡單(但危險)的方式''eval'。 – chepner

+0

難道你沒有讀過關於該鏈接的所有帖子和所有關於'eval'的負面評論? – cdarke

+0

真的不要這樣做。永遠。 – msw

-1

假設這是Bash,你可以使用一個數組變量。

declare -a args      # Make args an array. 
args=("Open Drive" -d output_dir) # Assign three elements. 
python pgm32.py "${args[@]}"   # Pass to pgm32.py as array. 
0

這真的很簡單。報價參數在shell命令:

$ python pgm32.py "$args" 

你已經這樣做你自己:

但是,當我直接在命令行調用python腳本,並 傳似「開放帶動」的說法或打開\驅動器,腳本的 sys.arv = [「pgm32.py」,「開放帶動」]

這是因爲你保護殼分詞的空間,這些線工作;在其他例子中,你沒有。這完全是關於shell,與Python無關。