带有选项的Shell命令不能与Python Popen一起使用(shell = True)

时间:2014-05-01 18:50:26

标签: python shell solaris popen

我正在尝试使用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
    >>> 

有谁知道为什么会这样?

1 个答案:

答案 0 :(得分:2)

使用shell=True时,将整个命令作为字符串传递:

p = subprocess.Popen("ls -l",shell=True,stdout=subprocess.PIPE)

丹尼尔关于shell=True危险的观点是有效的。