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 :

Lancer plusieurs commandes DOS


Sujet :

Python

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 27
    Points : 16
    Points
    16
    Par défaut Lancer plusieurs commandes DOS
    Bonjour,

    je me demandais si il était possible de lancer plusieurs commandes "dépendantes" depuis python vers MSDOS.
    Exemple: je voudrais faire un "cd" vers un autre path et lister les répertoires "dir".
    Comment est-ce qu'on écrit ça? Je connais le os.sytem(cmd) mais pas facile d’enchainer plusieurs commandes dépendantes du résultat des précédentes...je ne sais pas si c'est très clair :p

    Merci en tous cas

  2. #2
    Membre à l'essai
    Homme Profil pro
    Ingénieur-Chercheur
    Inscrit en
    Février 2010
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur-Chercheur
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2010
    Messages : 12
    Points : 16
    Points
    16
    Par défaut
    Citation Envoyé par rom44 Voir le message
    Bonjour,

    je me demandais si il était possible de lancer plusieurs commandes "dépendantes" depuis python vers MSDOS.
    Exemple: je voudrais faire un "cd" vers un autre path et lister les répertoires "dir".
    Comment est-ce qu'on écrit ça? Je connais le os.sytem(cmd) mais pas facile d’enchainer plusieurs commandes dépendantes du résultat des précédentes...je ne sais pas si c'est très clair :p

    Merci en tous cas
    Bonsoir,

    Indépendamment du système, je pense que les modules standards Python "os" et "os.path" et leurs nombreuses fonctionnalités doivent permettre de réaliser une grande partie de ce que vous cherchez à faire.

    Cordialement

  3. #3
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Sous Linux (Bash), on peut chaîner plusieurs commandes sur une seule ligne, avec “&&”, comme par exemple :

    Et je me suis laissé dire que && marchait aussi sous MS-DOS…

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Comme le dit OliSharkPython c'est os.

    cd path > os.chdir(path)
    echo %cd% > os.getcwd()
    dir > os.listdir(path)/os.listdir(os.getcwd())
    etc..

    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
    21
    22
    23
    24
    25
    26
    27
    28
    >>> import os
    >>> os.getcwd()
    '/home/patrice'
    >>> os.path.basename(os.getcwd())
    'patrice'
    >>> os.path.dirname(os.getcwd())
    '/home'
    >>> os.chdir(os.path.dirname(os.getcwd()))
    >>> os.getcwd()
    '/home'
    >>> os.chdir(os.path.expanduser('~'))
    >>> os.getcwd()
    '/home/patrice'
    >>> os.makedirs('tutu')
    >>> os.chdir('tutu')
    >>> os.getcwd()
    '/home/patrice/tutu'
    >>> os.listdir(os.getcwd())
    []
    >>> with open('tutu.txt', 'w') as fd:
    ...     fd.write('test')
    ... 
    >>> with open('tutu.txt', 'r') as fd:
    ...     print(fd.read())
    ... 
    test
    >>> os.listdir(os.getcwd())
    ['tutu.txt']
    C'est quand même plus simple non ?

    @+
    Merci d'utiliser le forum pour les questions techniques.

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par mont29 Voir le message
    Sous Linux (Bash), on peut chaîner plusieurs commandes sur une seule ligne, avec “&&”, comme par exemple :

    Et je me suis laissé dire que && marchait aussi sous MS-DOS…
    Je viens de tomber sur ceci lors de mon 'ménage'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import subprocess
     
    def sendcommand(command):
        return proc.communicate(command)[0]
     
    proc = subprocess.Popen("cmd.exe", shell=True, stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE)
    print sendcommand('dir\ndir /s \n\exit\n')
    # A toi de construire la commande
    Comme cela fonctionne aussi sur la banquise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import subprocess
     
    def sendcommand(command):
        return proc.communicate(command)[0]
     
    proc = subprocess.Popen("bash", shell=True, stdin=subprocess.PIPE,
                            stdout=subprocess.PIPE)
    print sendcommand('cd /tmp\nls -Al \n\exit\n')
    C'est sans doute une façon de 'chaîner' comme le dit mont29.

    Je reste toutefois sur os pour la réponse.

    @+
    Merci d'utiliser le forum pour les questions techniques.

  6. #6
    Membre à l'essai
    Inscrit en
    Août 2010
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 27
    Points : 16
    Points
    16
    Par défaut
    Bonjour et merci à tous pour vos réponses

    La solution qui réponds le plus à mes attente est celle de mont29. Effectivement les "&&" fonctionnent sur Windows.

    PauseKawa ta solution fonctionne mais j'ai l'impression que l'on peut utiliser "proc" une seule fois ou alors il faut le réinstantié à chaque fois..

    merci en tous cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lancer une commande DOS a partir d'un poste UNIX
    Par sam.fet dans le forum Linux
    Réponses: 7
    Dernier message: 19/05/2006, 14h06
  2. lancer une commande dos dans une page ASP
    Par noznoz78 dans le forum ASP
    Réponses: 4
    Dernier message: 13/02/2006, 19h06
  3. [system] lancer une commande dos
    Par romuluslepunk dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 20/08/2005, 11h54
  4. Lancer des commandes dos à partir d'un fichier texte
    Par tpdm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/08/2005, 16h56
  5. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 17h38

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