2016-04-19 6 views
1

Ich möchte ein externes Programm von Python ausführen, Ausgabe (viel Text) in eine Protokolldatei umleiten und warten auf das Programm zu beenden. Ich weiß, ich kann es über Bash tun:Python: externe Programm ausführen und direkte Ausgabe in Datei und warten auf Ende

#! /bin/bash 
my_external_program > log_file 2>&1 
echo "done" 

Aber wie kann ich das gleiche mit Python tun? Beachten Sie, dass ich mit dem bash-Befehl die log_file überprüfen kann, während das Programm läuft. Ich möchte diese Eigenschaft auch in Python.

Antwort

1

Controlling a python script from another script

Sie können den Link oben überprüfen, es ist in der Tat ähnliches Problem. Mit Popen vom Subprozess oder von os.popen ist es möglich, Echtzeit zu überprüfen.

Mit einem einfachen os.system ("Ihr Skript> /tmp/mickey.log") wird auch das Skript ausgeführt, aber es wird die Ausführung des Befehls vorher warten.

Bitte lassen Sie mich wissen, wenn dies Ihr Problem löst.

+0

Wie kann ich stderr in die Protokolldatei umleiten als auch? Wenn ich _os.system ("my_script &> my_log") auspro **** e, erstellt es keine Protokolldatei, sondern wirft alles auf das Python-Terminal. –

+1

In einem Bash-Skript verwenden Sie 2> & 1, um sterr an stdout umzuleiten, die Sie an mein Protokoll senden. Also zum Beispiel: script.py 2> & 1> mickey.log Ich denke, das wird deine Frage lösen :-) –

2

Siehe das subprocess Modul.

Für example:

with open("log_file", "w") as log_file: 
    subprocess.run(["my_external_program"], stdout=log_file, stderr=log_file) 
print("done") 
+0

+1. großartige Lösung mit Python-Subprozess, aber ich wähle @ Marco Lösung, da es kürzer ist (obwohl os.system veraltet sein soll). –

+1

Das, Hauptproblem mit 'os.system()' ist Sicherheit. Es ist auch jetzt redundant mit 'subprocess.run ('...', shell = True)'. Die übergebene Zeichenfolge wird an eine zu interpretierende Shell übergeben. (Das ist genau dasselbe wie das Bash-Skript, das Sie gepostet haben) Wenn Sie die gesamte Zeichenfolge fest codieren, die in Ordnung sein kann, aber wenn Sie Daten von irgendwo zum Konstruieren der Zeichenfolge erhalten, könnten Sie Code ausführen, den Sie nicht vorhaben! (Nur zu deiner Information) – dsh

Verwandte Themen