2

为什么如果我运行subprocess.check_output('ls')一切正常但是当我向命令添加参数时:subprocess.check_output('ls -la')我收到错误:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
    process = Popen(stdout=PIPE, *popenargs, **kwargs)
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

如何将命令参数传递给subprocess.check_output()?

4

2 回答 2

6

您需要将参数拆分为一个列表:

subprocess.check_output(['ls', '-la']) 

subprocess调用对象不会像 shell 那样将命令解析为单个参数。您要么需要自己执行此操作,要么需要subprocess明确使用 shell:

subprocess.check_output('ls -la', shell=True) 

不推荐使用后者,因为它会使您的应用程序暴露于安全漏洞。如果需要,您可以使用它shlex.split()来解析类似 shell 的命令行:

>>> import shlex
>>> shlex.split('ls -la')
['ls', '-la']
于 2012-11-11T14:30:21.093 回答
0

你可能会发现sh.py更友好:

import sh

print sh.ls("-la")
于 2012-11-12T05:56:21.483 回答