#1 Le 21/07/2010, à 16:22
- jde3
[Python] Rendre une commande "silencieuse"
Bonjour,
J'utilise une librairie qui affiche (à mon goût) trop de choses à l'écran lorsque j'appelle une méthode particulière.
Je me demandais s'il y avait un moyen de rendre cette commande silencieuse, une sorte de :
commande > /dev/null
mais en python.
Merci d'avance de vos avis éclairés...
EDIT : je précise qu'un simple :
sys.stdout = open("tmp.out","w")
sys.stderr = open("tmp.err","w")
ne suffit pas. Est-ce dû au fait que la librairie en question soit une interface python d'une librairie C ?
Dernière modification par jde3 (Le 21/07/2010, à 16:36)
Hors ligne
#2 Le 21/07/2010, à 16:49
- bejazzy
Re : [Python] Rendre une commande "silencieuse"
Bonjour,
Par curiosité, essaie:
import os, sys
sys.stdout = os.open(os.devnull, os.O_RDWR)
Dell Inspiron 1525 - #!CrunchBang Linux 10 Statler Xfce --- #! FR
Hors ligne
#3 Le 21/07/2010, à 16:53
- jde3
Re : [Python] Rendre une commande "silencieuse"
Salut,
Ça ne fonctionne pas non plus... J'ai toujours cette sortie non voulue...
Dernière modification par jde3 (Le 21/07/2010, à 16:55)
Hors ligne
#4 Le 23/07/2010, à 11:43
- Marabout
Re : [Python] Rendre une commande "silencieuse"
Salut,
Tu devrais regarder du côté de os.dup2.
Par exemple:
import os
import sys
f = open(os.devnull, 'w')
os.dup2(f.fileno(), sys.stdout.fileno())
os.dup2(f.fileno(), sys.stderr.fileno())
f.close()
Dernière modification par Marabout (Le 23/07/2010, à 11:45)
Hors ligne
#5 Le 27/07/2010, à 11:46
- jde3
Re : [Python] Rendre une commande "silencieuse"
Salut,
Merci à toi pour ton astuce. Ça marche effectivement. Par contre, comme je ne suis jamais content, j'aimerais pouvoir ensuite récupérer un stdout fonctionnel.
J'ai testé :
import os
import sys
f = open(os.devnull, 'w')
os.dup2(f.fileno(), sys.stdout.fileno())
os.dup2(f.fileno(), sys.stderr.fileno())
f.close()
# Commande silencieuse...
# Fin du silence
os.dup2(sys.__stdout__.fileno(), sys.stdout.fileno())
os.dup2(sys.__stdout__.fileno(), sys.stderr.fileno())
mais sans succès... Quelqu'un aurait une idée ?
Dernière modification par jde3 (Le 27/07/2010, à 11:46)
Hors ligne