2014-01-14 37 views
1

不通过大括号作为参数在Windows命令行,以下行为完全如预期:Python的子进程在Windows

C:\> c:\cygwin\bin\printf "<%s>\n" "{foo}" 
{foo} 

从本机Win32 Python实例中,然而,大括号被剥离:

>>> subprocess.Popen(['c:\\cygwin\\bin\\printf', '<%s>\n', '{foo}'], 
...     stdout=subprocess.PIPE).communicate()[0].rstrip('\n') 
'foo' 

这是怎么回事?

回答

2

你应该能够使用pipes.quote()来解决这个问题: http://docs.python.org/2/library/pipes.html#pipes.quote

另外,如果你在python3,结账shlex.quotes():http://docs.python.org/2/library/shlex.html#module-shlex

+0

该文档链接到您有一个大粉红色“自2.7版弃用”框。这就是说,我不确定你在2.7中使用的是什么(或者在3.0-3.2中,它既没有这个也没有'shlex.quote')... – abarnert

+1

这确实有效。也就是说,我对它的工作非常不安 - 'shell = False'使用子进程.Popen毕竟应该避免任何非文字处理参数字符。 –

+0

是的,其相当粗略... –