2017-08-19 4 views
0

Ich versuche, unten Befehl mit Python-Subprozess auszuführen, aber es ist fehlgeschlagen.Python Subprozess check_output

Bitte helfen

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

ich unten Ausgang bin immer:

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 

Antwort

0

Wenn Sie check_output mit einer Liste nennen, müßten Sie den Befehl selbst zerlegen, wie in:

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

Dies verwendet keine Shell, sodass Sie die Eingabeumleitung nicht verwenden können. Wenn Sie wirklich Ihren Befehl auszuführen mit einem Shell wollen, übergibt dann eine Zeichenfolge und setzt shell=True:

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

Oder mit einer Liste, bevor die Hand starten, oder versuchen, mit 'shlex.split()' auf der Saite zuerst ein ... –

0

Dies ist eine falsche Art und Weise ist subprocess zu nennen. Eine schnelle und schmutzige Art und Weise, es zu tun ist es, wie sich ändern: Das wird aufrufen Shell des Systems

subprocess.call(cmd, shell=True) 

den Befehl auszuführen, und Sie haben Zugriff auf alle Leckereien es bietet. Es ist jedoch nicht leicht zu verwenden, also überprüfen Sie vorher security considerations aus der Dokumentation.

Andernfalls können Sie einfach den Befehl als eine Liste liefern, etwa so:

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