2016-10-04 91 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