Je ne peux pas entrer la norme dans le sous-processus ...

problème

Il existe une bibliothèque Python standard appelée sous-processus. Il s'agit d'un substitut qui peut exécuter plusieurs fichiers exécutables en même temps, mais cette fois, il était bloqué avec une entrée standard dans le fichier exécutable.

Par exemple, supposons que vous créez le fichier C ++ suivant et en faites un exe.

sample.cpp



include <iostream>
using namespace std;

int main(){

    while(true){
        int a;
        cout << "input"
        cin >>a;
        cout << a * 2;
        return 0;
    }
}

Eh bien, je reçois juste le nombre et affiche le nombre qui est doublé, mais je veux continuer à l'exécuter avec while et l'exécuter à partir de python sans le démarrer un par un.

Je ne savais pas quoi faire en faisant ça ...

Solution

J'ai transformé le code précédent en un format exécutable comme sample.exe. Ensuite, le code ci-dessous a fonctionné.

import subprocess

#Universel car l'échange avec byte est gênant_newline to true
sample = subprocess.Popen("sample.exe",
                                 stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)

if sample.stdout.readline() == "input:\n": #Le texte à lire doit inclure jusqu'au saut de ligne.
    sample.stdin.write("20\n") #Des pauses sont également requises
    sample.stdin.flush() #Puisque l'entrée est en état d'être accumulée dans le tampon, elle devient ici l'entrée pour la première fois.

Cela marche. J'ai écrit la partie importante du code, alors vérifiez-le ensemble. C'est vraiment difficile. sous-processus

Recommended Posts

Je ne peux pas entrer la norme dans le sous-processus ...
Je ne peux pas saisir de caractères dans la zone de texte! ?? !! ?? !! !! ??
Scikit-learn ne peut pas être installé en Python
Je ne peux pas déboguer les scripts python dans Eclipse
Je ne peux pas obtenir l'élément dans Selenium!
Pourquoi ne puis-je pas installer matplotlib avec python! !!
Obtenez une sortie standard en temps réel avec le sous-processus Python
J'ai lu PEP 585 (Type Hinting Generics In Standard Collections)
Anaconda ne peut pas être installé!
Impossible de manipuler l'iframe dans la page avec Selenium
[Note] Le module installé ne peut pas être appelé dans jupyter.
Je ne peux pas utiliser la commande darknet dans Google Colaboratory!
Je n'arrive pas à me connecter à la page d'administration avec Django 3
J'ai écrit python en japonais
Ecrire l'entrée standard dans le code
Matrice transposée au standard Python
Je ne peux pas effectuer de recherche avec # google-map. ..
Je comprends Python en japonais!
Ce que j'ai appris en Python
J'ai participé à AtCoder (ABC158)
Lire la sortie standard d'un sous-processus ligne par ligne en Python
J'obtiens un attribut impossible à définir lors de l'utilisation de @property en python
Je ne peux pas importer de modules dans le répertoire parent même avec sys.path.append ('..')