Python: sous-processus.appel, stdout vers un fichier, stderr dans un fichier, afficher stderr sur l'écran en temps réel

J'ai un outil de ligne de commande (en fait plusieurs) que je suis en train d'écrire un wrapper pour en Python.

L'outil est généralement utilisé comme ceci:

 $ path_to_tool -option1 -option2 > file_out

L'utilisateur obtient la sortie écrit à file_out, et est également en mesure de voir les différents messages d'état de l'outil, comme il est en cours d'exécution.

Je veux reproduire ce comportement, tout en également la journalisation des stderr (les messages d'état) à un fichier.

Ce que j'ai est: est-ce

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

Cela fonctionne bien SAUF que stderr n'est pas écrit à l'écran.
Je peux ajouter du code pour imprimer le contenu de la log_file à l'écran bien sûr, mais ensuite l'utilisateur va le voir après tout est fait, plutôt que de tout ce qui se passe.

Pour résumer, comportement désiré est:

  1. d'appel(), ou sous-processus()
  2. direct stdout vers un fichier
  3. direct stderr dans un fichier, tout aussi écrit stderr à l'écran en temps réel, comme si le
    l'outil a été appelée directement à partir de la ligne de commande.

J'ai le sentiment que je suis absent quelque chose de vraiment simple, ou c'est beaucoup plus compliqué que ce que je pensais...merci pour toute aide!

EDIT: cela ne doit fonctionner sur Linux.

InformationsquelleAutor Ben S. | 2013-08-20