Bonjour,
J'ouvre un fichier texte en écriture et je le passe en paramètre stdout à subprocess.check_call pour lancer un exécutable et récupérer sa sortie standard.
Jusque là, rien de bien mystérieux...
Mes soucis arrivent quand je veux laisser la sortie standard dirigée vers la console, mais la filtrant.
Voici 2 petits bout de codes, bien plus clairs (dans mon exemple simplifié, je ne veux pas afficher les lignes qui contiennent "11") :
Ce qui marcheCe que je voudrais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 with open('foo.txt','wt') as out : subprocess.check_call( 'dir' , stdout=out , shell=True ) for line in open('foo.txt'): if '11' not in line : print line,Il râle parce que FilteredOutput ne définit pas la méthode fileno.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class FilteredOutput : def write(self,txt): if '11' not in txt : print txt subprocess.check_call( 'dir' , stdout=FilteredOutput() , shell=True )
En regardant dans le code de subprocess, je vois bien qu'il va directement taper sur un file descriptor et toute la machinerie des fichiers au niveau du système.
Du coup, ma petite supercherie fait long feu !
D'où ma question : Existe-t-il un (autre) moyen d'arriver à ce que je veux ?
Partager