Envoie commande vers console

Salut à tous.
J’aimerais savoir s’il y a un moyen de communiquer avec la console, comme on le fait avec un clavier.

Par exemple:

  • Programme 1: à son lancement dans la console, demande à l’utilisateur d’entrer une lettre, l’utilisateur entre une lettre, le programme affiche la lettre envoyer par l’utilisateur.

  • Programme 2: lance le programme 1 dans la console, le programme 1 demande une lettre à l’utilisateur, le programme 2 envoie une lettre à la console que programme 1 récupère.

Donc la différence est qu’au lieu d’entrer la lettre au clavier, c’est le programme 2 qui envoie la lettre demandé.

Le langage de programmation peut-être bash, perl, python, c etc du moment qu’il y a un moyen.

En Bash, les pipes devraient te suffire :

dunatotatos@PC-Duna:/tmp/test_krip$ cat echo_.sh #!/bin/sh echo "foo" dunatotatos@PC-Duna:/tmp/test_krip$ cat read_.sh #!/bin/sh read var echo $var dunatotatos@PC-Duna:/tmp/test_krip$ ./echo_.sh | ./read_.sh foo

En Python, regarde le module subprocess. Crée les deux objets subprocess liés à tes deux programme, et règle la stdin de l’un sur la stdout de l’autre (voir les arguments à donner à subprocess.Popen.

Pour Perl, je ne peux pas t’aider.

EDIT : En prime, un exemple en Python. Il est un peu dégueu, désolé…

[code]dunatotatos@PC-Duna:/tmp/test_krip$ cat echo_.sh
#!/bin/sh
echo "foo"
dunatotatos@PC-Duna:/tmp/test_krip$ cat read_.sh
#!/bin/sh
read var
echo $var | wc -c
dunatotatos@PC-Duna:/tmp/test_krip$ cat pipe.py
#!/usr/bin/env python

import subprocess

echo_proc = subprocess.Popen("./echo_.sh", stdout=subprocess.PIPE)
read_proc = subprocess.Popen("./read_.sh", stdin = echo_proc.stdout)
dunatotatos@PC-Duna:/tmp/test_krip$ ./pipe.py
4[/code]

J’ai ajouté le comptage de caractères pour être sûr que c’est bien read_.sh qui écrit sur la sortie standard, et pas echo_.sh

EDIT 2 : Attention, le fonctionnement des entrées/sorties standards t’oblige à raisonner par ligne. Tu ne peux pas envoyer juste un caractère d’un programme à un autre. Il faut envoyer des lignes complètes. Les StdIO ne sont flushés/lus qu’à chaque \n.