我正在尝试使用python 2.6.8中的Popen来执行带有选项的命令。 我注意到我无法使用shell = True。但是,默认情况下(shell默认为False)工作正常。
以下是shell=True
代码:
>>> import subprocess
>>>
>>>
>>> p = subprocess.Popen(['ls','-l'],shell=True,stdout=subprocess.PIPE)
>>> o = p.communicate()[0]
>>> o
'cmd.py\ncmd.py.~1~\ncmd.pyc'
以下是ls -l
没有shell=True
的相同内容:
>>> p1 = subprocess.Popen(['ls','-l'],stdout=subprocess.PIPE)
>>> o1 = p1.communicate()[0]
>>> o1
'total 27218
-rwxrwxrwx 1 bkaithpa staff 3660 Jan 15 17:05 cmd.py
-rwxrwxrwx 1 bkaithpa staff 3660 Jun 6 2013 cmd.py.~1~
-rwxrwxrwx 1 bkaithpa staff 4139 Jun 6 2013 cmd.pyc
>>>
有谁知道为什么会这样?
答案 0 :(得分:2)
使用shell=True
时,将整个命令作为字符串传递:
p = subprocess.Popen("ls -l",shell=True,stdout=subprocess.PIPE)
丹尼尔关于shell=True
危险的观点是有效的。