7
votes

Comment écrire une sortie de script dans le fichier et la ligne de commande?

J'ai un script Python à long terme que je passe à partir de la ligne de commande. Le script écrit des messages de progression et des résultats à la sortie standard. Je veux capturer tout ce que le script écrit à la sortie standard dans un fichier, mais le voir également sur la ligne de commande. Sinon, je souhaite que la sortie se passe immédiatement dans le fichier, afin que je puisse utiliser queue pour afficher la progression. J'ai essayé ceci: xxx

mais il ne produit aucune sortie (il suffit d'exécuter le script produit la sortie comme prévu). Quelqu'un peut-il proposer une solution simple? J'utilise Mac OS X 10.6.4.

EDIT J'utilise Imprimer pour la sortie dans mon script.


0 commentaires

4 Réponses :


1
votes

Vous pouvez essayer de faire sys.stdout.flush () occasionnellement dans votre script et en cours d'exécution avec tee à nouveau. Lorsque stdout est redirigé vers TEE , il peut être tamponné plus longtemps que s'il va directement à un terminal.


0 commentaires

2
votes

Le fait que vous ne voyez pas quelque chose est probablement lié au fait que la mise en mémoire tampon se produise. Donc, vous obtenez seulement une sortie tous les 4 ko de texte ou donc.

Au lieu de cela, essayez quelque chose comme ceci: xxx

puis décorer sys.stdout avec cette classe avec un code comme que: xxx

de cette façon, chaque sortie ( impression incluse) est rincé à la sortie standard et au fichier spécifié. Peut-être nécessiter de peaufiner parce que je n'ai pas testé cette mise en œuvre.

Bien sûr, attendez-vous à voir une pénalité de performance (faible de la plupart du temps) lors de l'impression de messages.


0 commentaires

16
votes

Vous êtes sur le chemin droit, mais le problème est la mise en mémoire tampon de Python.

Heureusement, il existe un moyen de le dire à la sortie de la mémoire tampon: xxx


1 commentaires

N'oubliez pas de rediriger le flux starr sur stdout Si vous souhaitez également capturer cela: python -u myLongRunngingScript.py 2> & 1 | tee log.txt



2
votes

Une autre solution simple pourrait également être xxx


0 commentaires