【问题标题】:Python subprocess command argumentsPython 子进程命令参数
【发布时间】:2012-10-31 04:29:31
【问题描述】:

为什么如果我运行 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()

【问题讨论】:

    标签: python linux arguments subprocess


    【解决方案1】:

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

    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']
    

    【讨论】:

      【解决方案2】:

      您可能会觉得sh.py 更友好:

      import sh
      
      print sh.ls("-la")
      

      【讨论】:

        猜你喜欢
        • 2017-01-09
        • 2020-11-26
        • 1970-01-01
        • 1970-01-01
        • 2021-12-10
        • 2017-11-22
        • 2021-04-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多