Bonjour à tous !
Je suis actuellement en train de créer une sorte de chaine de calcul afin d'automatiser un processus de conversion de données, géré par un script Python global. Un des maillons de cette chaîne est un petit executable (compilé en fortran d'après mes infos) que j'aimerais donc intégrer au script global.
Je me suis un peu renseigné et j'ai donc découvert les fonctions popen et communicate pour gérer les subprocess : ça marche très bien pour les modules que j'utilise qui font leur moulinette dans leur coin, mais j'ai un problème avec le fortran que j'ai évoqué au dessus puisque celui-ci demande des informations à l'utilisateur, en gros 3 infos façon "raw_input", mais en fortran
, pour faire son boulot. J'utilise le code suivant :
Code :
- sub1 = subprocess.Popen(args="moulinette.exe", stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
- print sub1.communicate("Athena" )
|
Et donc quand je lance le python global, au moment d'arriver à cette moulinette, le python se met en attente, mais rien ne s'affiche, et je ne peux rien taper, alors que j'aimerais pouvoir l'utiliser comme si j'avais lancé directement l'executable moulinette.exe.
J'ai cherché un peu sur internet, et je suis tombé sur des stdout/stdin.write, des histoires de "deadlock" ou encore de buffer à vider avec une certaine fonction "flush", mais même si j'ai à peu près compris ces principes, je n'ai pas réussi à obtenir ce que je voulais pour ma chaîne de calcul.
Voilà ce que j'aimerais donc : le python parent lance le fortran fils, lorsqu'il reçoit une demande d'input du fils il affiche tout ce qu'il a reçu entre temps (la question "Entrer la premiere info :" en l'occurence), attend un réponse de l'utilisateur pendant que le fils est en pause, une fois celle-ci renseignée, le parent l'envoie au fils qui continue sa bidouille jusqu'à la deuxième question, et ainsi de suite...
Je n'ai pas l'impression de trop rêver en demandant ça au Python, donc je dois mal m'y prendre...Y'aurait-il donc quelqu'un pour m'éclairer un peu sur la façon de faire ? Merci beaucoup !