Traduire le fichier de mémoire de sortie standard en chaîne de texte anglais comme si une commande d’impression était utilisée

Je lance une commande find pour un fichier particulier que je sais existe. Je voudrais obtenir le chemin d’access à ce fichier, car je ne veux pas supposer que je sais où se trouve le fichier. Je crois comprendre que je dois redirect la sortie standard, exécuter la commande et capturer la sortie, rétablir la sortie standard, puis récupérer les résultats. Le problème vient quand je récupère les résultats … Je ne peux pas les déchiffrer:

import os from cSsortingngIO import SsortingngIO stdout_backup = sys.stdout #Backup standard output stdout_output = SsortingngIO() sys.stdout = stdout_output #Redirect standard output os.system("find . -name 'foobar.ext' -print") #Find a known file sys.stdout = stdout_backup #re-hook-up standard output as top priority paths_to_file = stdout_ouput.get_value() #Resortingeve results 

Je trouve tous les chemins que je pourrais vouloir, le problème est que chemins_à_fichier donne ceci:

 Out[9]: '\n\x01\x1b[0;32m\x02In [\x01\x1b[1;32m\x027\x01\x1b[0;32m\x02]: \x01\x1b[0m\x02\n\x01\x1b[0;32m\x02In [\x01\x1b[1;32m\x028\x01\x1b[0;32m\x02]: \x01\x1b[0m\x02' 

Je ne sais pas quoi faire avec ça. Ce que je voulais, c’était quelque chose comme ce que la commande d’impression fournit:

 ./Work/Halpin Programs/Servers/selenium-server.jar 

Comment puis-je rendre cette sortie utilisable pour ouvrir un fichier? Si je peux obtenir la commande d’impression, je peux ouvrir le fichier que je veux.

Veuillez réorienter la question si je suis mal orienté. Je vous remercie!

Vous ne pouvez pas capturer la sortie d’un sous-processus en modifiant sys.stdout . Ce que vous avez capturé semble être des séquences d’échappement ANSI de votre interpréteur interactif Python (IPython?).

Pour obtenir la sortie d’une commande externe, vous devez utiliser subprocess.check_output() :

 paths = subprocess.check_output(["find", ".", "-name", "foobar.ext"]) 

Dans ce cas particulier, je n’appellerais généralement pas une commande externe, mais plutôt utiliser os.walk() pour rechercher les fichiers directement dans le processus Python.

Edit : Voici comment utiliser os.walk() pour trouver les fichiers:

 def find(path, pattern): for root, dirs, files in os.walk(path): for match in fnmatch.filter(files, pattern): yield os.path.join(root, match) paths = list(find(".", "foobar.ext"))