Python子进程命令参数

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 directory
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ers 6

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

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)