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 :

[python3] conversion bash->python3


Sujet :

Python

  1. #1
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut [python3] conversion bash->python3
    Bonjour,

    J'ai un script que je dois convertir en python3. Je bloque sur un point et ne sait pas quoi rechercher. Ce que j'ai pu trouvé ne semble pas répondre à mon besoin.

    Voilà le problème : Je dois lancer un processus externe qui actuellement tourne ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fdisk -u -p /dev/sda <<EOF
    n
    p
    1
     
    w
    EOF
    J'ai utilisé plus haut dans mon programme subprocess.popen, mais je ne comprends pas comment reproduire le comportement de "<< les commandes FDISK"

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    il suffit d'écrire (il me semble) sur l'entrée standard de l'instance Popen (instanciée correctement) les 5 "lignes" que tu mets entre les marqueurs 'EOF'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'n\n', 'p\n', '1\n', ' \n', 'w\n'
    ou encore la chaine (plus peut-être un dernier '\n') et de refermer l'entrée standard.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    Merci plxpi.

    Du coup, j'étais parti sur une autre méthode :
    je fais quelques essais avec sort et un fichier contenant quelques lignes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    f=open('data.txt','r').read()
    cmd = [ 'sort', '-n' ]
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    p.communicate(f)[0] # reste bloqué ici
    Le processus ne s'arrête jamais à moins d'ajouter un timeout=XX dans communicate qui du coup nécessite une capture d'erreur... et qui n'est pas trop propre je trouve.

    Y a t'il un moyen de fournir une option genre "EOF" à communicate() ?

  4. #4
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Tu essayes (sans trop de succès) de reproduire le mécanisme du bash appelé here documents.

    Mais où est le fdisk du départ ? dans data.txt ?

    C'est toi qui vois mais la méthode que j'ai proposée me semble plus appropriée.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  5. #5
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    "here Documents", je savais pas que ça avait un nom, c'est mieux pour faire les recherches

    Le fdisk se trouvera dans le 1er élément de cmd

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par vohufr Voir le message
    Y a t'il un moyen de fournir une option genre "EOF" à communicate() ?
    Techniquement, lorsqu'on veut écrire dans le "stdin" du sous process via un PIPE, on crée le sous process:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from subprocess import *
    p = Popen( '<<<la commande>>>', stdin=PIPE, ...)
    Puis on écrit dedans via:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p.stdin.write('des bytes')
    Et on expédie un EOF:
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 685
    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 685
    Points : 30 974
    Points
    30 974
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Techniquement, lorsqu'on veut écrire dans le "stdin" du sous process via un PIPE, on crée le sous process:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from subprocess import *
    p = Popen( '<<<la commande>>>', stdin=PIPE, ...)
    Bonjour

    Y a-t-il un avantage à passer par ce mécanisme par rapport à un plus classique
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
    p=os.popen("la commande", "w")
    p.write("des bytes")
    p.close()
    ???
    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]

  8. #8
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    @Sve@r: Déjà, os.popen est (depuis la 2.6) considéré comme obsolète (deprecated).

    Sinon, je pensais surtout à ces scripts/exécutables qui font de la saisie sur invite/prompt (ce qui se trouve entre les marqueurs n'est pas passé en arguments de la ligne de commande, ici fdisk que je ne connais pas).

    Avec les paramètres de subprocess.Popen, je pense qu'on gère mieux ces affichages (prompts) "sauvages"
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    Y a-t-il un avantage à passer par ce mécanisme par rapport à un plus classique
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import os
    p=os.popen("la commande", "w")
    p.write("des bytes")
    p.close()
    ???
    Techniquement, çà fonctionne mais os.popen est "deprecated" depuis la version 2.6. ...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre éclairé
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Octobre 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 312
    Points : 749
    Points
    749
    Par défaut
    wiztricks > Merci ! c'est exactement ce que je cherchais

  11. #11
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par vohufr Voir le message
    wiztricks > Merci ! c'est exactement ce que je cherchais
    Et c'est la même chose que ce qu'a proposé plxpy dans son message...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Comment créer une bdd en python3 ?
    Par Petugnia dans le forum Général Python
    Réponses: 4
    Dernier message: 11/09/2009, 09h08
  2. Python3 et MySQL
    Par teramp3 dans le forum Bibliothèques tierces
    Réponses: 5
    Dernier message: 30/06/2009, 17h24
  3. comment agrandir en height un Entry python3
    Par Petugnia dans le forum Tkinter
    Réponses: 0
    Dernier message: 25/05/2009, 09h19
  4. [bash] conversion de fichiers avec exclusion
    Par CosmoKnacki dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 17/03/2009, 17h27
  5. Python3.01a et moi
    Par gilles.goarrin dans le forum Général Python
    Réponses: 2
    Dernier message: 22/01/2009, 21h44

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