J'ai écrit un programme (myProg.py) qui utilise un module de sous-processus pour exécuter d'autres programmes python via la fonction d'exécution. J'ai remarqué que arg dans les instructions d'entrée (arg) dans ces autres programmes python ne sont pas affichés sur la console (stdout), tandis que les arguments dans print (args) sont affichés correctement. Cela ne se produit que lorsque j'exécute mon programme via la console. Cela ne se produit pas lorsque j'exécute mon programme via LiClipse.Python subprocess.run avec stderr = subprocess.PIPE redirige l'entrée (texte)
Voici la façon la plus simple de reproduire cette situation:
En utilisant python 3.6.2 et Windows 10
- créer un programme Python contenant les deux lignes suivantes et l'enregistrer comme someProgram.py:
a = input("Enter anything") print("a has: " + a)
- ouvert cmd, tapez: Type python
- : import subprocess Type
- : subprocess.run ([ "python", "path..to..someProgram.py"], stderr = subprocess.PIPE)
- Pas ouptut jusqu'à présent, mais l'interprète attend en entrée ... tapez quelque chose et appuyez sur Entrée.
- Vous verrez la sortie de l'instruction d'impression.
Si vous supprimez, stderr = subprocess.PIPE vous verrez les sorties correctes.
Maintenant, enregistrez le code des étapes 2 & 3 dans un autre fichier, appelez-le myProg.py dans le même dossier que someProgram.py. Exécutez myProg.py à partir de LiClipse. Vous constaterez que myProg.py s'exécute correctement et produit les sorties correctes.
Mes questions sont les suivantes:
- Pourquoi ce problème avec subprocess.run passe
- Comment puis-je résoudre ce
- Pourquoi y aurait-il une différence entre le code en cours d'exécution à travers et à travers un commandline IDE.
Merci d'avoir indiqué le rapport de bogue. J'utilise Windows, donc je vais devoir télécharger et utiliser pyreadline à la place.Connaissez-vous une autre solution de contournement indépendante du système d'exploitation? –
ou, vous pouvez imprimer prompt à stdout par vous-même, mis à jour. – georgexsh
Merci, georgexsh. Malheureusement, cela ne fonctionnerait pas pour mes besoins. –