L'obtention de la sortie d'un processus au moment de l'exécution

Je suis aide d'un script python pour exécuter un processus à l'aide de subprocess.Popen et, simultanément, de stocker le résultat dans un fichier texte ainsi que de l'imprimer sur la console. C'est mon code:

result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
for line in result.stdout.readlines(): #read and store result in log file
    openfile.write("%s\n" %line)
    print("%s" %line)

Code ci-dessus fonctionne très bien, mais ce qu'il fait c'est qu'il remplit d'abord le processus et stocke le résultat dans résultat variable. Après que pour la boucle magasins de la sortie ainsi que de l'imprimer.

Mais je veux que la sortie au moment de l'exécution (comme mon processus peut prendre des heures pour compléter, je n'obtenez pas de résultat pour toutes ces heures).

Donc, il y a une autre fonction qui me donne de la sortie de manière dynamique (à l'exécution), signifie que dès que le processus donne la première ligne, il doit être imprimé.

Je ne l'ai jamais essayé, mais je pense que vous êtes censé envoyer vos propres Python file objet de la stdout (ou stdin, ou stderr argument). Ensuite, vous avez à interroger ce fichier. Subprocess a été inventé pour vous épargner cette douleur, mais il semble que vous n'avez pas le choix. Bonne chance.
"il remplit d'abord le processus et stocke le résultat dans la suite" - qui est tout simplement pas vrai.
"il remplit d'abord le processus et stocke le résultat dans result" - qui n'est tout simplement pas vrai. Eh bien, quand je suis en cours d'exécution Popen de commande, il continue à fonctionner jusqu'à ce que le processus est terminé, et puis il exécute en outre de codage. Si son travail d'une autre manière, je suis impatient de le savoir.
Semble trop compliqué, et le "pas le choix" allégation est fausse.
vous pouvez envisager d'utiliser fcntl pour définir result.stdout non bloquant, cela permettra de lire en temps réel et s'il n'existe pas encore de données, IOError seront soulevées

OriginalL'auteur Niyojan | 2013-05-15