Exécuter des programmes en arrière-plan et de rediriger leurs sorties de fichier en temps réel
Je veux exécuter plusieurs scripts python simultanément dans un bash de session et à l'inspection de leurs sorties respectivement en temps réel. Pour s'acquitter de cette tâche, j'ai écrit un simple script bash qui est indiqué ci-dessous:
#!/bin/bash
python 1.py > 1.output &
python 2.py > 2.output &
python 3.py > 3.output &
Lorsque j'utilise cat 1.output
de commande pour vérifier ce qui a été imprimé dans le milieu de l'exécution, cependant, rien ne peut être vu.
Après réflexion, je me rends compte que la 1.output
doit être rempli lors de la 1.py
termine son exécution. En d'autres termes, la méthode que j'ai utilisée ici n'est pas un real time
de la mode.
Vous pouvez vous propse que d'attendre que ces scripts python' terminer. Le fait, malheureusement, c'est qu'il y a des scripts python sont en fait de longue exécuter des programmes, ils ont peut-être fini après des jours ou des mois, et c'est pourquoi je tiens à inspecter leurs sorties en temps réel.
Aussi, vous pouvez me suggérer de modifier les scripts python pour imprimer le message de déposer directement au lieu de stdout
. Désolé, les scripts sont ici trop complexe à modifier, il y a des mandrins de print
fonction dans les.
que puis-je faire maintenant?
Poste le code que vous utilisez pour cette journalisation de l'action s'il vous plaît.
OriginalL'auteur Douglas Su | 2015-07-10
Vous devez vous connecter pour publier un commentaire.
La
-u
commutateur et l'équivalentPYTHONUNBUFFERED
variable d'environnement des forces stdout être sans tampon. Essayez ceci:ou
Noter que
-u
a des effets secondaires: lire la doc pour en savoir plus.Référence:
OriginalL'auteur Robᵩ
Si vous pouvez trouver une sorte de boucle principale du programme, qui pourrait être un bon indicateur de progrès, il serait bon de le faire, écrivez-de-fichier. Si vous dire que la sortie ne pas remplir jusqu'à ce que le flux de sortie est fermé par Python, alors c'est probablement la plus simple solution de rechange.
OriginalL'auteur bcdan
Vous pouvez essayer de remplacer stderr/stdout dans vos scripts en les faisant:
Puis tous les
print
appels écrire dans ce dossier spécial, pas de sortie standard (stdout). Cependant, le principal problème pourrait être avec tampon IO. Vous avez en quelque sorteflush
contenu de ces fichiers sur le disque.OriginalL'auteur Ivan Velichko