zub*_*ber 2 python linux arguments subprocess
为什么如果我运行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 directoryRun Code Online (Sandbox Code Playgroud)
如何将命令参数传递给subprocess.check_output()?
您需要将参数拆分为列表:
subprocess.check_output(['ls', '-la'])
Run Code Online (Sandbox Code Playgroud)
该subprocess像外壳程序可调用不分析命令出个别论点.您需要自己执行此操作,或者需要告诉您subprocess明确使用shell:
subprocess.check_output('ls -la', shell=True)
Run Code Online (Sandbox Code Playgroud)
建议不要使用后者,因为它可能会使您的应用程序暴露在安全漏洞中.shlex.split()如果需要,您可以使用解析类似shell的命令行:
>>> import shlex
>>> shlex.split('ls -la')
['ls', '-la']
Run Code Online (Sandbox Code Playgroud)