2014-01-14 35 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

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