Bonjour,
je dois rendre accessible, via un module Python, GDB qui m'est fournit sous forme de '.exe'. Le but étant de pouvoir lancer une commande GDB, lire immédiatement le résultat, à n'importe quel moment d'un script dans le même process GDB. Après de multiple essais et recherches, je suis dans l'impasse.
J'ai trouvé comment exécuter des commandes et récupérer le résultat lorsque mon process est terminé, ce qui ne m'interesse pas au final car j'ai besoin de récupérer le résultat au fur et à mesure.
J'ai trouvé une super solution: pexpect, sauf que ça fonctionne sous linux et que je suis sous windows xp.
J'utilise la classe Popen de subprocess.
J'ai tenté l'utilisation de communicate:
Code :
- gdbProcess = Popen('P:/3_WORK/CPIOM/Soft/gdb.exe', shell = True, stdin = PIPE, stdout = PIPE)
- out,err = gdbProcess.communicate('help\r\n')
- print out
|
Ce code me donne déjà une erreur à la fin de l'exécution de la commande que je lis dans le pipe de sortie qui est:
"(gdb) Exception condition detected on fd 0
error detected on stdin"
A partir de là, mon process GDB a été fermé donc pas de possibilité de lui renvoyer une commande. Pourriez-vous m'éclairer?
Ma deuxième solution est d'utiliser les pipes d'entrée et sortie comme des fichiers. Sauf que le process n'étant pas fini, il n'y a pas de EOF dans stdout. Faut-il que je me contente de bidouiller ce que je peux lire dans stdout afin de récupérer seulement ce qui m'interesse, ou existe-t-il des manières plus élégantes et surtout plus propres de le faire?
De plus, je ne veux pas relire en permanence ce que j'ai déjà lu, il y a une possibilité de netoyer stdout ou vaut-il mieux utiliser la position de la dernière lecture dans le pipe?
J'ai l'habitude de programmer mais pas en Python donc si vous pouviez éclaircir ce sujet et me renseigner sur les divers exceptions qui peuvent être lever dans ce genre de manipulation.
Merci d'avance.