我尝试使用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
答案 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"])