Redirection du terminal vers un programme

Le problème exposé dans ce sujet a été résolu.

Bonjour,

J’aimerai lancer un programme en fond, qui "écoute le terminal" en permanence et qui réagit à ce qui a été écrit dans le terminal par les autres programmes. Auriez vous une idée de comment faire ? J’ai trouvé des choses sur subprocess, mais je ne comprends pas très bien comment m’en servir. Merci !

+0 -0

Salut !

Je pense que tu peux regarder du côté des pipes (prog1 | tonprog) – la sortie de prog1 est redirigée vers l’entrée de tonprog –, et du côté de la commande tee pour garder l’affichage sur le terminal.

De plus, tu parles de plusieurs programmes mais ma solution ne marche que pour un seul programme et ne "lit" pas vraiment le terminal, du coup je réponds pas vraiment à la question, désolé :/

Je pense tout de même qu’il est possible de rediriger la sortie d’un terminal vers ton programme. (cat < /dev/pts/1) (redirection d’entrée), mais j’ai testé et ça n’est pas très satisfaisant !

Mais j’ai assumé que tu étais sous linux et que tu utilisait Bash, mais tu es sous quel OS (ç’aurait dû être ma première question d’ailleurs) ?

Du coup je pense que dans tous les cas, on peut pas faire ça dans python sans faire 2-3 manips système avant, car sinon ton programme n’a pas accès à la sortie des autres programmes.

[EDIT] : woops ma première solution ne marchait pas

[EDIT2] : Tourne 7 fois la langue dans ta bouche avant de parler… : je devrais appliquer ce proverbe aux posts

+1 -0

Je suis sous Debian.

En fait je travaille avec un lecteur de carte RFID de chez NXP, et quand quelqu’un badge, je dois récupérer l’information transmise à un raspberry. On m’a dit que c’était une simple sortie dans le terminale.

Je suis juste chargé de "récupérer" cette sortie (comment ça peut se faire si les programmes on été lancés dans 2 consoles différentes ?), donc je dois avoir en quelque sorte un programme prêt à réagir à chaque interruption.

Donc ce n’est pas une commande que je lance.

Le vrai problème je suppose c’est que je n’ai pas connaissance exacte du matériel utilisé. J’ai trouvé ça: lecteur RFID (page 8), et si c’est ce matériel, alors le problème est résolu, il me suffirait de faire explorenfc-basic -k | monprog. Mais je ne suis pas sûr, alors je voudrais savoir comment faire dans un cas général.

Quelqu’un aurait une solution "universelle" pour avoir un oeil sur toutes les sorties ?

+0 -0

Ah eh bien je n’ai pas de solution…

Peut-être que si tu fais un script (bash ou python) dont tu te sers pour lancer toutes les commandes et qui stocke la sortie dans un fichier bien défini, ça pourrait le faire.

Par exemple, tu mets dans ton .bashrc l’alias alias explorenfc-basic="explorenfc-basic | file", et comme ça l’output de explorenfc est toujours dans le fichier file, que tu peux lire depuis ton programme python.

Alors clairement ça me paraît plutôt très sale comme façon de procéder, mais à part daire une surcouche de terminal en python, je vois pas d’autre manière d’intercepter les sorties de tous les terminaux dans ton programme.

Après je suis clairement pas un pro dans le domaine, donc je te souhaite bonne chance dans tes recherches :)

+0 -0

Tu as bien un programme qui écoute en fond les événements transmits au RPI et qui envoie des données sur son STDOUT ?

Si oui il te faire en sorte que ce programme soit lancé par Python (avec subprocess.Popen), en lui passant notamment l’argument stdout=subprocess.PIPE.

Une fois le processus lancé, tu pourras lire la sortie de ton programme comme s’il s’agissait d’un fichier texte.

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte