#1 Le 13/05/2014, à 10:20
- kboo
[Résolu] [Python 2.6.6] Comment récupérer le retour d'une cmd bash
Bonjour,
J'essaye de récupérer le retour de la commande bah suivante:
find /home/user/tmp/testSHA1/ -type f -name "*.py" -exec sha1sum {} \; > .tmp.sha1
Pour cela j'ai écris le code suivant:
import os
import subprocess
import shlex
class vvv():
global folder
global sha1
def __init__(self, folder):
self.folder = str(folder)
cmd = "find " + self.folder + " -type f -name *.py -exec sha1sum {} \; > .tmp.sha1 && sha1sum .tmp.sha1 && rm .tmp.sha1"
print cmd
a=subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE)
stdout_value=a.communicate()[0]
print "Sortie: " + stdout_value
if __name__ == "__main__":
app1version = vvv("/home/user/tmp/testSHA1/")
Or cela me renvoi:
find /home/user/tmp/testSHA1/ -type f -name *.py -exec sha1sum {} \; > .tmp.sha1 && sha1sum .tmp.sha1 && rm .tmp.sha1
find: les chemins doivent précéder l'expression : >
Utilisation : find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [chemin...] [expression]
Sorie:
Une idée?
Merci d'avance
Dernière modification par kboo (Le 13/05/2014, à 13:53)
Hors ligne
#2 Le 13/05/2014, à 11:41
- pingouinux
Re : [Résolu] [Python 2.6.6] Comment récupérer le retour d'une cmd bash
Bonjour,
find /home/user/tmp/testSHA1/ -type f -name *.py -exec sha1sum {} \; > .tmp.sha1 && sha1sum .tmp.sha1 && rm .tmp.sha1 find: les chemins doivent précéder l'expression : >
S'il y a des fichiers *.py dans le répertoire d'où est lancée la commande, il faut remplacer
-name *.py
par
-name \*.py
ou
-name '*.py'
Hors ligne
#3 Le 13/05/2014, à 12:12
- kboo
Re : [Résolu] [Python 2.6.6] Comment récupérer le retour d'une cmd bash
Merci pingouinux de ton aide,
Malheureusement j'ai même résultat avec:
'*.py'
et
\*.py
à savoir:
find /home/user/tmp/testSHA1/ -type f -name '*.py' -exec sha1sum {} \; > .tmp.sha1 && sha1sum .tmp.sha1 && rm .tmp.sha1
find: les chemins doivent précéder l'expression : >
Utilisation : find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [chemin...] [expression]
Sortie:
J'ai essayé en simplifiant ceci:
import os
import subprocess
import shlex
class vvv():
global folder
global sha1
def __init__(self, folder):
self.folder = str(folder)
cmd = "find " + self.folder + " -type f -name *.py -exec sha1sum {} \;"
print cmd
a=subprocess.Popen(shlex.split(cmd),stdout=subprocess.PIPE)
stdout_value=a.communicate()[0]
print "Sortie: " + stdout_value
if __name__ == "__main__":
app1version = vvv("/home/user/tmp/testSHA1/")
et là ça marche mais la commande n'est pas complète! apparemment c'est le
>
qui bloque tout :-/
Help :-/
Hors ligne
#4 Le 13/05/2014, à 12:51
- pingouinux
Re : [Résolu] [Python 2.6.6] Comment récupérer le retour d'une cmd bash
Effectivement, ce que je t'ai indiqué en #2 est utile quand find est lancé à partir du shell, mais pas dans ton exemple en python.
Essaye en remplaçant ton appel à Popen par
a=subprocess.Popen(cmd,stdout=subprocess.PIPE,shell=True)
Hors ligne
#5 Le 13/05/2014, à 13:52
- kboo
Re : [Résolu] [Python 2.6.6] Comment récupérer le retour d'une cmd bash
Merci pingouinux, ça marche :-)
Hors ligne