2009-11-06 2 views
0

Cette question est très similaire à this one. Je veux lire la sortie d'une application de console à moi. L'application ne se termine pas et ne prend pas d'entrée de stdin.Débogage de la lecture de la sortie d'une application de console Windows à l'aide de Python

Lorsque je modifie la solution de rix0rrr pour exécuter mon application, puis exécuter sa solution, Python se bloque car read (1) ne retourne pas. La sortie initiale de l'application est "Démarrage du serveur. \ N". Pouvez-vous deviner quelle propriété mon application peut avoir qui empêche sa solution de fonctionner? L'étendue de mes changements est que je l'ai changé ceci:

p = Popen(["cmd.exe"], stdin=PIPE, stdout=PIPE) 
prompt = re.compile(r"^C:\\.*>", re.M) 

à ceci:

p = Popen(["c:\\path\\to\\my\\app\\app.exe"], stdin=PIPE, stdout=PIPE) 
prompt = re.compile(r"Starting", re.M) 
import pdb;pdb.set_trace() 

J'ai aussi créé une version de test de mon application qui retourne immédiatement et vérifié que la sortie de l'application est renvoyée par read() dans ce cas. Son exemple original, non modifié, comme prévu, ne pend pas non plus.

J'ai aussi essayé le code ActiveState auquel Piotr s'est lié dans sa réponse. Aucune sortie n'est renvoyée par le processus dans ce cas non plus.

Ceci est Python 2.4.4 sur Vista.

+0

Vous devez afficher plus de code, y compris la façon dont vous lisez le processus 'STDOUT –

Répondre

1

La première chose que je voudrais vérifier est la mise en mémoire tampon dans app.exe. Si "Démarrage du serveur. \ N" est mis en mémoire tampon et ne parvient pas au canal, vous ne pouvez rien faire du côté du lecteur.

Donc, essayez d'ajouter fflush(stdout) après printf("Starting the server.\n").

+0

C'était fini! .. – Brian

Questions connexes