2012-11-11 50 views
2

为什么,如果我跑subprocess.check_output('ls')一切正常,但是当我添加参数的命令,如:subprocess.check_output('ls -la')我得到错误:Python的子命令参数

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()

回答

5

您需要的参数分成列表:像贝壳做

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

subprocess可调用不分析命令出个别论点。你要么需要把这个自己做,或者你需要告诉subprocess明确使用shell:不建议

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

后者,因为它可以使您的应用程序的安全漏洞。您可以使用shlex.split()解析一个壳状的命令行如果需要的话:

>>> import shlex 
>>> shlex.split('ls -la') 
['ls', '-la'] 
0

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

import sh 

print sh.ls("-la")