# Envoie commande vers console

**URL:** <https://www.debian-fr.org/t/envoie-commande-vers-console/67445>\
**Category:** Programmation\
**Created:** [Février 21, 2016, 10:03 UTC](https://www.debian-fr.org/t/envoie-commande-vers-console/67445 "2016-02-21T22:03:26Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![kripteks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/k/71c47a/32.png) [@kripteks](https://www.debian-fr.org/u/kripteks)\
**Post date:** [Février 21, 2016, 10:03 UTC](https://www.debian-fr.org/t/envoie-commande-vers-console/67445/1 "2016-02-21T22:03:26Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Dunatotatos](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/c2a13f/32.png) [@Dunatotatos](https://www.debian-fr.org/u/Dunatotatos)\
**Post date:** [Février 21, 2016, 10:03 UTC](https://www.debian-fr.org/t/envoie-commande-vers-console/67445/2 "2016-02-21T22:03:30Z")

</div>

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](http://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.
