python子进程check_output

时间:2017-08-19 14:28:54

标签: python python-2.7 subprocess

我尝试使用python子进程执行下面的命令,但它失败了。

请帮忙

  import subprocess
  cmd = "bash /opt/health_check -t 2>/dev/null"
  retcode = subprocess.call([cmd])
  print retcode

我的输出低于输出:

Traceback (most recent call last):
  File "./script.py", line 65, in <module>
    retcode = subprocess.call([cmd])
  File "/usr/lib64/python2.7/subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

2 个答案:

答案 0 :(得分:0)

如果您使用列表致电check_output,则需要自行对命令进行标记,如:

import subprocess
cmd = ["bash", "/opt/health_check", "-t"]
retcode = subprocess.call([cmd])
print retcode

这不使用shell,因此您无法使用输入重定向。如果你真的想用shell执行命令,那么传递一个字符串并设置shell=True

import subprocess
cmd = "bash /opt/health_check -t 2>/dev/null"
retcode = subprocess.call(cmd, shell=True)
print retcode

答案 1 :(得分:0)

这是一种调用subprocess的错误方法。快速而肮脏的方法就是改变它:

subprocess.call(cmd, shell=True)

这将调用系统的shell来执行命令,并且您可以访问它提供的所有好东西。但是,不能使用ligthly,因此请先检查文档中的security considerations

否则,您只需将命令作为列表提供,如下所示:

subprocess.call(["bash", "/opt/health_check"])