Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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... hmm 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