IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

pdfgrep avec python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut pdfgrep avec python
    Bonsoir, j'ai une commande qui fonctionne dans le terminal Ubuntu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pdfgrep circuit -r /media/rep
    Je souhaiterais pouvoir exécuter la commande mais cela ne fonctionne pas. Je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import subprocess
    recherche="circuit"
    repertoire = "/media/rep"
    subprocess.Popen(['/bin/sh', '-c', 'pdfgrep %s -r %s'%(recherche,repertoire)])
    Apparemment, je n'ai pas saisi les subtilités de subprocess.
    Si qqn a une idée...

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par marco056 Voir le message
    Apparemment, je n'ai pas saisi les subtilités de subprocess.
    Si qqn a une idée...
    subprocess.Popen(("pdfgrep", "circuit", "-r", "/media/rep"))...

    Citation Envoyé par marco056 Voir le message
    mais cela ne fonctionne pas.
    Pour checker si ça vient de subprocess ou pdfgrep tu peux tenter le basic subprocess.Popen(("ls", "-l")) qui, chez-moi, fonctionne...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    avec grep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import subprocess
    p = subprocess.Popen(("ls", "-l"))
    print(p)
    j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    runfile('/media/marco5/Disque-4To/TSI_Phys/grep0.py', wdir='/media/marco5/Disque-4To/TSI_Phys')
    <subprocess.Popen object at 0x7f1292ba9f60>
    total 541
    -rwxrwxrwx 1 root root    228 oct.  24 14:14 aspirateur1008.py
    drwxrwxrwx 1 root root   4096 oct.  17 16:12 colles_18-19
    drwxrwxrwx 1 root root   4096 déc.  14  2018 Colles-autres
    drwxrwxrwx 1 root root  61440 déc.   9 11:00 Divers-LaTeX
    drwxrwxrwx 1 root root  20480 déc.  11 14:27 doc-olivier
    drwxrwxrwx 1 root root   4096 déc.  11 20:12 doc-web
    -rwxrwxrwx 1 root root    170 déc.  14 00:58 grep0.py
    -rwxrwxrwx 1 root root   2072 déc.  14 00:58 pdfgrep0.py
    drwxrwxrwx 1 root root  65536 nov.   1 14:18 TSI_14-15
    drwxrwxrwx 1 root root  40960 nov.   1 14:18 TSI_15-16
    drwxrwxrwx 1 root root  36864 nov.   1 14:18 TSI_16-17
    drwxrwxrwx 1 root root  65536 nov.   1 14:18 TSI_17-18
    drwxrwxrwx 1 root root  98304 nov.   1 14:18 TSI_18-19
    drwxrwxrwx 1 root root 139264 déc.  13 18:39 TSI_19-20
    drwxrwxrwx 1 root root   4096 oct.  30 01:30 TSI_spe_doc
    drwxrwxrwx 1 root root   4096 déc.  11 20:17 TSI_sup_doc
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import subprocess
    recherche="circuit"
    repertoire = "/media/marco5/Disque-4To/TSI_Phys"
    p = subprocess.Popen(['/bin/sh', '-c', 'pdfgrep %s -r %s'%(recherche,repertoire)])
    print(p)
    j'obtiens ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <subprocess.Popen object at 0x7f12900ee780>
    Si je ne mets pas le p = et le print, aucune sortie...

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par marco056 Voir le message
    avec grep :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import subprocess
    p = subprocess.Popen(("ls", "-l"))
    print(p)
    j'obtiens ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    runfile('/media/marco5/Disque-4To/TSI_Phys/grep0.py', wdir='/media/marco5/Disque-4To/TSI_Phys')
    <subprocess.Popen object at 0x7f1292ba9f60>
    total 541
    -rwxrwxrwx 1 root root    228 oct.  24 14:14 aspirateur1008.py
    drwxrwxrwx 1 root root   4096 oct.  17 16:12 colles_18-19
    drwxrwxrwx 1 root root   4096 déc.  14  2018 Colles-autres
    drwxrwxrwx 1 root root  61440 déc.   9 11:00 Divers-LaTeX
    drwxrwxrwx 1 root root  20480 déc.  11 14:27 doc-olivier
    drwxrwxrwx 1 root root   4096 déc.  11 20:12 doc-web
    -rwxrwxrwx 1 root root    170 déc.  14 00:58 grep0.py
    -rwxrwxrwx 1 root root   2072 déc.  14 00:58 pdfgrep0.py
    drwxrwxrwx 1 root root  65536 nov.   1 14:18 TSI_14-15
    drwxrwxrwx 1 root root  40960 nov.   1 14:18 TSI_15-16
    drwxrwxrwx 1 root root  36864 nov.   1 14:18 TSI_16-17
    drwxrwxrwx 1 root root  65536 nov.   1 14:18 TSI_17-18
    drwxrwxrwx 1 root root  98304 nov.   1 14:18 TSI_18-19
    drwxrwxrwx 1 root root 139264 déc.  13 18:39 TSI_19-20
    drwxrwxrwx 1 root root   4096 oct.  30 01:30 TSI_spe_doc
    drwxrwxrwx 1 root root   4096 déc.  11 20:17 TSI_sup_doc
    Donc subprocess fonctionne.

    Citation Envoyé par marco056 Voir le message
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    import subprocess
    recherche="circuit"
    repertoire = "/media/marco5/Disque-4To/TSI_Phys"
    p = subprocess.Popen(['/bin/sh', '-c', 'pdfgrep %s -r %s'%(recherche,repertoire)])
    print(p)
    j'obtiens ce résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <subprocess.Popen object at 0x7f12900ee780>
    Si je ne mets pas le p = et le print, aucune sortie...
    Déjà c'est normal que si tu affiches "p", tu obtiennes son contenu qui est bien un objet subprocess.Popen. J'espère que tu ne t'attendais pas à y retrouver le contenu du stdout de la commande qui était exécutée. Ce que tu vois avec "ls -l" c'est son exécution à l'écran, c'est pas issu du print(p). Pour t'aider à chercher la cause, je pars de l'hypothèse que "pdfgrep" donnera naturellement lui-aussi une sortie écran.

    Ensuite 2 choses
    1. pourquoi tu t'obstines à vouloir mettre ton pdfgrep dans un sous-shell ? Ce n'est pas que ça ne fonctionnerait pas mais d'une part je trouve ça inutile, et d'autre part quand on teste un truc, on essaye d'être le plus proche du truc pour pouvoir éliminer toute cause indirecte d'erreur. Quand je t'ai demandé de tester "ls -l", tu n'as pas écrit "sh -c ls -l" !!!
    2. pourquoi tu tentes de mettre les arguments de pdfgrep dans la string que subprocess considère comme la string du programme à invoquer ? subprocess sait parfaitement gérer les arguments d'un programme => subprocess.Popen(("pdfgrep", recherche, "-r", repertoire)).
    3. et aussi pourquoi tu utilises une liste là où un tuple suffit (bon ok 3 choses et pas 2)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Pour les deux derniers points, tu as raison.
    J'ai fait de multiples tentatives.
    Celle-ci, comme les autres, ne donne aucun affichage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    subprocess.Popen(("pdfgrep", recherche, "-r", repertoire))
    Pour le premier point, c'est le sh ? En fait j'ai testé pas mal de choses et celle-ci semblait mieux fonctionner. Je ne connais pas les sous-shell..

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Essaye comme ceci pour voir ce qu'il en sort:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    data, error = subprocess.Popen(["pdfgrep", recherche, "-r", repertoire], 
                                        universal_newlines=True, 
                                        stdout=subprocess.PIPE).communicate()
     
    if data is not None:
        for d in data.split("\n"):
            print(">> %s" % d)
     
    else:
        print("Error %s " % error)

Discussions similaires

  1. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  2. Manipuler un fichier excel avec python
    Par dipajero dans le forum Général Python
    Réponses: 4
    Dernier message: 09/02/2006, 23h14
  3. cmt se connecté a oracle pour faire une requete avec python
    Par dipajero dans le forum Bibliothèques tierces
    Réponses: 6
    Dernier message: 28/12/2005, 20h22
  4. Réponses: 2
    Dernier message: 19/12/2005, 13h15
  5. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo