2016-10-04 88 views
0

我使用OptionParser(),並定義如下:接收外殼命令作爲OptionParser字符串參數

parser.add_option("--cmd", dest="command", help="command to run") 

然而,如果我提供了一個複雜的外殼命令,如:

python shell.py --cmd "for i in `seq 1 10`; do xxx; done" 

和國內印刷options.command,我得到一些意想不到的對我說:

for i in 1 
2 
3 
4 
5 
6 
7 
8 
9 
10; do 

是否有傳遞一個好辦法一個是shell命令的OptionParser選項?

回答

1

當調用:

python shell.py --cmd "for i in `seq 1 10`; do xxx; done" 

殼第一替代封閉在`與它的輸出的命令。因此,你實際上調用命令是:

python shell.py --cmd "for i in 1 
2 
3 
4 
5 
6 
7 
8 
9 
10; do ..." 

爲了避免這種情況:

逃生調用命令時,`字符:

python shell.py --cmd "for i in \`seq 1 10\`; do xxx; done" 

使用強引用(串括在')

python shell.py --cmd 'for i in `seq 1 10`; do xxx; done' 
+0

我不想t o在輸入命令中使用轉義符,擴展命令中有更多特殊字符,這仍然是可能的嗎? – sramij

+0

它與你的shell不僅僅是python相關。嘗試使用'而不是' – napuzba