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 13/05/2014, à 11: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, à 14:53)

Hors ligne

#2 Le 13/05/2014, à 12: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, à 13: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, à 13: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, à 14: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