verhindern Teilprozess.Popen von der Anzeige der Ausgabe in python
So, ich bin versucht, speichern Sie die Ausgabe eines Befehls in eine variable. Ich will es nicht zur Anzeige Ausgabe während der Ausführung des Befehls, obwohl...
Den code habe ich jetzt wie folgt...
def getoutput(*args):
myargs=args
listargs=[l.split(' ',1) for l in myargs]
import subprocess
output=subprocess.Popen(listargs[0], shell=False ,stdout=subprocess.PIPE)
out, error = output.communicate()
return(out,error)
def main():
a,b=getoutput("httpd -S")
if __name__ == '__main__':
main()
Wenn ich dies in eine Datei und führen Sie auf der Befehlszeile. Ich bekomme die folgende Ausgabe, obwohl ich nicht über eine print-Anweisung in den code. Wie kann ich dies verhindern, während noch das speichern der Ausgabe?
#python ./apache.py
httpd: Could not reliably determine the server's fully qualified domain name, using xxx.xxx.xxx.xx for ServerName
Syntax OK
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie sehen, ist die standard-Fehler-Ausgabe und nicht auf standard-output ausgegeben. Stderr-Umleitung wird gesteuert durch die
stderr
Konstruktor-argument. Es wird standardmäßig aufNone
, was bedeutet, dass keine Weiterleitung erfolgt, das ist, warum Sie sehen, diese Ausgabe.In der Regel ist es eine gute Idee, um die stderr-Ausgabe seit es die aids-debugging und nicht auf normalen Umleitung (z.B.
|
und>
shell-Umleitung nicht capture stderr standardmäßig). Jedoch leiten Sie es woanders auf die gleiche Weise tun stdout:Oder können Sie einfach drop stderr:
Sie fangen stdout, aber du bist nicht fangen stderr(standard-error), die ich denke, ist, wo die Nachricht herkommt.
Setzen, wird alles von stderr in die gleiche Stelle wie stdout.