Ich versuche ein Python-Skript zu schreiben, das als einfache UNIX-Bash-Befehlsshell fungiert. Ich muss alle Ausgaben von meinem Skript blockieren und es zu einer von zwei Dateien umleiten (Fehler oder Ausgabe). Leider bekomme ich beim Ausführen meines Bash-Befehls in einem Verzeichnis die Ausgabe "grep: test_dir: Ist ein Verzeichnis". Dies ist nach dem Umleiten meiner sys.stdout in eine temporäre Datei. Meine Theorie ist, dass Grep selbst die Ausgabe zurücksetzt und diesen Fehler druckt, anstatt einfach die Ausgabe zurückzugeben. Gibt es eine Möglichkeit, alle Ausgaben in eine Datei umzuleiten? Oder missverstehe ich einfach, wie man in Python umleitet?Umleitung der Ausgabe von subprocess.call funktioniert nicht
Hier ist mein aktueller Code.
try:
temp_out = sys.stdout
sys.stdout = open('./temp.txt', 'w+')
output = subprocess.call(['grep', search[0], search[1]])
sys.stdout = temp_out
except subprocess.CalledProcessError as err:
print output
err_output = err.returncode
print "In error"
Genau das habe ich gebraucht! Es trennt sowohl den Rückgabewert als auch mögliche Fehler auf verschiedene Variablen, die ich manipulieren kann. –
@JacobChesley Eigentlich, wenn Sie nur die Ausgabe und den Fehler des Subprozesses in Dateien umleiten wollen, ist die Lösung von 9000 besser. Wenn du alles umleiten willst, inklusive 'print (...)' in deinem Programm, ist meins besser. – Liteye
In diesem Fall wollte ich alle Ausgaben des Subprozesses einschließlich des Drucks umleiten. Dies war so, dass ich alle Ausgaben in das Format, das ich brauche, manipulieren kann. In diesem Fall war Ihre Lösung, was ich suchte, obwohl 9000 ist eine gute Idee, unter die Haube für zukünftige Bemühungen zu halten. –