Python: Unterprozess.Anruf, stdout zu Datei stderr zu Datei -, Anzeige-stderr auf dem Bildschirm in Echtzeit

Ich habe ein Kommandozeilen-tool (eigentlich mehrere) , Schreibe ich einen wrapper für Python.

Das Werkzeug ist in der Regel wie folgt verwendet:

 $ path_to_tool -option1 -option2 > file_out

Erhält der Benutzer die Ausgabe geschrieben file_out, und ist auch in der Lage, um zu sehen, diverse status-Meldungen von dem tool, wie es läuft.

Möchte ich replizieren dieses Verhalten, während auch die Protokollierung von stderr (Statusmeldungen) in eine Datei.

Was ich habe ist dieses:

from subprocess import call
call(['path_to_tool','-option1','option2'], stdout = file_out, stderr = log_file)

Dies funktioniert gut, AUßER, dass stderr nicht auf den Bildschirm geschrieben.
Ich kann hinzufügen von code zum drucken des Inhalts des log_file auf den Bildschirm natürlich, aber dann wird der Benutzer sehen, nachdem alles getan wird, statt, während es geschieht.

Zur Erinnerung, gewünschte Verhalten:

  1. call () oder subprocess()
  2. direkte stdout in eine Datei
  3. direkte stderr in eine Datei, während auch das schreiben stderr auf dem Bildschirm in Echtzeit, als ob die
    Werkzeug berufen worden war, direkt von der Befehlszeile aus.

Habe ich das Gefühl ich bin entweder etwas fehlt wirklich einfach, oder ist das komplizierter als ich dachte...vielen Dank für jede Hilfe!!!

EDIT: dies muss nur auf Linux zu arbeiten.

InformationsquelleAutor der Frage Ben S. | 2013-08-20

Schreibe einen Kommentar