2012-11-11 88 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")