# Résultat d'une commande bash dans python

**URL:** <https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418 "2016-02-20T23:19:32Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/1 "2016-02-20T23:19:32Z")

</div>

Bonjour,

Je souhaiterais que le résultat d’une commande bash s’affiche dans une interface graphique en python (Tkinter).  
Voici la commande en question et son résultat:

`$ cat /dev/usbtmc0
Minor Number	Manufacturer	Product	Serial Number
001 Tektronix TDS2002b C630058`

Il s’agit d’un oscilloscope numérique connecté en usb.  
En fait j’aimerais tester le résultat de cette commande et qu’un message s’affiche dans mon programme python en fonction du résultat, quelque chose du genre:

“l’appareil Tektronix TDS2002b est bien connecté” ou “aucun appareil n’a été détecté, vérifier la connexion!”

C’est possible à votre avis? Je précise que je débute en programmation… Je cherche beaucoup sur le net, mais là je ne trouve pas vraiment ce que je voudrais…

Merci

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/2 "2016-02-20T23:19:35Z")

</div>

Le plus simple c’est d’utiliser la fonction open tout simplement :  
[docs.python.org/tutorial/inputoutput.html](http://docs.python.org/tutorial/inputoutput.html)

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/3 "2016-02-20T23:19:40Z")

</div>

Ok, merci! J’ai trouvé ça:

`sortie=os.popen("cat /dev/usbtmc0", "r").read()
print sortie
`

ça marche en console, mais je n’arrive pas à l’intégrer dans un label du genre:

`
		label = Tkinter.Label(self,text="print sortie", fg="red", height="2")
		label.grid(column=0,row=1,columnspan=5)`

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/4 "2016-02-20T23:19:40Z")

</div>

Je pensais plutôt :

`fichier=open("/dev/usbtmc0", "r").read()
sortie=fichier.read()
while sortie != "" :
    print sortie
    sortie=fichier.read()
fichier.close()`

Tu peut trouver de la doc ici :  
[fr.wikibooks.org/wiki/Apprendre\_ … s\_fichiers](http://fr.wikibooks.org/wiki/Apprendre_%C3%A0_programmer_avec_Python/Les_fichiers)

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/5 "2016-02-20T23:19:40Z")

</div>

Bon j’ai trouvé ce qui semble me correspondre:

```
	[code]status, output = getstatusoutput('cat /dev/usbtmc0')
	estConnecte = False
	if not status:
		for ligne in output:
			if ligne.find('Product') != -1:
				vendor = ligne.split()[1]
				modele = ligne.split()[2]
				estConnecte = True
				sortie= "L'appareill %s %s est bien connecté" % (vendor, modele,)
	if not estConnecte:
		sortie= "Aucun appareil detecté"

	label = Tkinter.Label(self,text=sortie, fg="red", height="2")

```

[/code]

ça a l’air de marcher… Faut juste que je teste avec un appareil connecté! 🙂  
Mais j’en ai malheureusement pas sous la main…

---

<div class="post-metadata">

**Author:** ![MisterFreez](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/m/bb73d2/32.png) [@MisterFreez](https://www.debian-fr.org/u/MisterFreez)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/6 "2016-02-20T23:19:41Z")

</div>

Cat ne fait que de la lecture de fichier autant utiliser python pour ça.

`fichier=open('/dev/usbtmc0', 'r')
ligne=fichier.readline()
while ligne != "" :
    ligne=fichier.readline()
`

---

<div class="post-metadata">

**Author:** ![totola](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/3be4f8/32.png) [@totola](https://www.debian-fr.org/u/totola)\
**Post date:** [Février 20, 2016, 11:19 UTC](https://www.debian-fr.org/t/resultat-dune-commande-bash-dans-python/28418/7 "2016-02-20T23:19:48Z")

</div>

Résolu de cette manière:

```
            [code]status, output = getstatusoutput('cat /dev/usbtmc0')
	estConnecte = False
	if not status:
		for ligne in output.split('\n'):
			if ligne.find('Product') == -1:
				vendor = ligne.split()[1]
				modele = ligne.split()[2]
				estConnecte = True
				sortie= "L'appareil %s %s est bien connecté" % (vendor, modele,)
	if not estConnecte:
		sortie= "Aucun appareil détecté, vérifiez le branchement de l'oscilloscope!"

	for ligne in output.split('\n'):
		if ligne.find('001') == -1:
			label = Tkinter.Label(self,text=sortie, bg="red")
			label.grid(column=0,row=1,columnspan=8)

	for ligne in output.split('\n'):
		if ligne.find('001') != -1:
			label = Tkinter.Label(self,text=sortie, bg="green")
			label.grid(column=0,row=1,columnspan=8)[/code]

```

Merci Misterfreez pour ton aide!
