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 :

réunir deux lignes de commande


Sujet :

Python

  1. #1
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut réunir deux lignes de commande
    Bonjour,

    j' ai cette commande (1) qui lance une connexion sur une passerelle et j' aimerais qu' a la suite de cette connexion s' effectue la commande (2) suivante automatiquement

    (1) os.popen("start plink -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:10.2.61.2:22 login@10.4.67.15")


    (2) os.system("putty.exe -load coldm1 ")

    auriez vous une idée ?

    Merci d' avance

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Bonjour,

    Os.popen est obsolète depuis python 2.6, utilise subprocess.popen à la place.

    Et via cette fonction, tu peux tester la valeur de retour avec la fonction wait :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    import subprocess
     
    p = subprocess.Popen("start plink -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:10.2.61.2:22 login@10.4.67.15".split())
    return_value = p.wait()

    La variable return_value contiendra la valeur de retour te la commande, il faut que tu te réfère à la documentation de la commande pour savoir quelle valeur tu vas obtenir. Ensuite i reste juste à lancer la seconde commande si tu as obtenue la valeur que tu attendais.

  3. #3
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    j'ai le message d' erreur suivant :

    return self.func(*args)
    File "E:\programation\progs\arret_plink_paramiko_mdp_v1\version_fonctionnelle_mpd_plink\module_gepex_v1.py", line 77, in tun_ssh_colweb
    p = subprocess.Popen("start plink -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:10.2.61.2:22 login@10.4.67.15".split())
    File "C:\Python27\lib\subprocess.py", line 390, in __init__
    errread, errwrite)
    File "C:\Python27\lib\subprocess.py", line 640, in _execute_child
    startupinfo)
    WindowsError: [Error 2] Le fichier spécifié est introuvable

    peut étre est ce du au fait que je travail sous Python 2.7 ? car le subprocess.py est bien présent

  4. #4
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Je boss sur python 2.7 et ça fonctionne très bien chez moi. Après je bosse sur linux.

    La commande que tu lances fonctionne bien quand tu la lances à la main dans l'invite de commande à l'emplacement ou tu lances ce script?

  5. #5
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    quand je lance subprocess.Popen cela me répond <class 'subprocess.Popen'>

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Non je parlais de la commande que t'essaie de lancer via subprocess.Popen(). Et déjà tu peux être sûr que ça ne vient pas de la lib subprocess avec ce qu'il te renvoie. Je pense vraiment que c'est ta commande qui ne fonctionne pas.

  7. #7
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    il semble que ce soit le "start" qui pose soucis .

    quand je mets: p=subprocess.Popen("plink.exe -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:10.2.67.1:22 login@10.3.66.15".split())

    rien ne se passe mais au moins plus de message d' erreur .

    je dis rien ne se passe mais j' imagine que la fenetre est cachée ? car à ce moment il devrait me demander le mot de passe pour la connexion

  8. #8
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    du coup je suis un peu gèné car la fenêtre dos ne 's' affiche pas pour me demander le mot de passe, une idée ?

    Merci

  9. #9
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Pour ça il faut utiliser les PIPE de subprocess ce qui donnerait un truc du genre:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import subprocess
     
    p = subprocess.Popen("start plink -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:10.2.61.2:22 login@10.4.67.15".split(), 
                                    stdin=subprocess.PIPE, stdout= suprocess.PIPE)
    p.communicate(input='password')
    return_value = p.wait()

    Après je passe jamais de donnée en entrée de commande de cette manière, du coup je ne saurais pas t'en dire plus, la doc subprocess et les tutos devrait t'aider mieux que moi.

  10. #10
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    argnnnn c'est la misére j'ai beau tout essayé ( enfin surement pas tout sinon cela fonctionnerai) pas moyen !

    alors c'est ce que je pensais, en indiquant le mot de passe cela fonctionne mais c'est plutôt moyen comme truc ....

    admettons...de rester comme cela dans un premier temps

    concernant la valeur de P voici ce qu' il me retourne

    subprocess.Popen object at 0x029FAD90

    comment verriez vous le "if" pour que je puisse passer la commande suivante ?

  11. #11
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Vous pouvez obtenir la valeur retourner par votre commande via p.wait(). Après il faudra vous référez à la documentation de votre commande pour savoir quelle est la valeur que vous attendez.

  12. #12
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    bon franchement je n' arrive pas à mettre en place quelque chose avec la commande subprocess.popen .
    si quelqu' un peut me "débloquer" sur le sujet ce ne serait pas de refus .

    Merci

  13. #13
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    j'ai du coup ce petit bout de script

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    p=subprocess.Popen("plink.exe -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:ipserv:22 login@ippasserelle -pw password".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        print 'connexion', p.pid
    qui se connecte et me retourne le terme 'connexion" avec un code à 4 chiffres qui change à chaque lancement du programme .

    du fait que le code à 4 chiffres soit aléatoire, comment dois je spécifier ma condition pourqu' il exécute une commande suivante exemple: (os.system("putty.exe -load servweb ")

    "correction" en fait le code a 4 chiffres s' affiche que la connexion soit établie ou pas ....du coup ! à l' aide !!!!!

    Merci d' avance

  14. #14
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Le pid n'est pas la valeur de retour de ta commande mais l'identifiant du processus pour la machine. Si tu veux la valeur de retour de ta commande, utilise p.wait().

    Une fois que tu utiliseras p.wait(), tu pourras tester la valeur de retour pour exécuter ta seconde commande.

  15. #15
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    si je met :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    p=subprocess.Popen("plink.exe -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:ipserv:22 login@ippasserelle -pw password".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    return_value = p.wait()
    print p
    le script plante !

  16. #16
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Non mais ne print pas p, print return_value. p est un objet Subprocess.Popen(), tu ne verras rien en le printant si ce n'est l'adresse mémoire.

    Et comment ça il plante? Quel est le message d'erreur? Qu'est-ce qui se passe?

  17. #17
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    je pense que ça tourne en boucle, je n'ai pas de message d' erreur par contre l' interface de mon application plante

  18. #18
    Membre éclairé
    Homme Profil pro
    Développeur backend (python)
    Inscrit en
    Mai 2014
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur backend (python)

    Informations forums :
    Inscription : Mai 2014
    Messages : 77
    Par défaut
    Si le programme tourne en boucle, ça veut dire que ta commande ne se finit pas.

    Tu as essayé de regarder si la commande renvoie un message avec p.communicate()?

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    p=subprocess.Popen("plink.exe -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2001:ipserv:22 login@ippasserelle -pw password".split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    stdout, stderr = p.communicate()
    return_value = p.wait()
    print stdout
    print stderr
    print return_value

  19. #19
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    il n'y a aucun retour en sortie de console, l' interface de mon application plante ....

  20. #20
    Membre averti
    Homme Profil pro
    Superviseur de Hotline
    Inscrit en
    Septembre 2016
    Messages
    34
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Superviseur de Hotline
    Secteur : Bâtiment

    Informations forums :
    Inscription : Septembre 2016
    Messages : 34
    Par défaut
    bon j'ai finalement mis en place cette solution qui vaut ce qu'elle vaut et qui fonctionne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    os.popen("start plink -v -x -a -T -C -noagent -ssh -L 127.0.0.1:2008:10.x.x.x:22 login@10.x.x.x -pw password")
    os.system("putty.exe -load serveur ")
    par contre j'aimerais au début de mon application pouvoir insérer le mot de passe "password au dessus" dans une boite pour qu' il soit réutiliser à chacunes des lignes de connexion ssh via plink

    une petite idée ?


    Merci !

Discussions similaires

  1. Réunir deux lignes dans un même tableau
    Par JonathanJohns dans le forum R
    Réponses: 1
    Dernier message: 24/04/2017, 20h24
  2. Réponses: 3
    Dernier message: 07/04/2003, 21h06
  3. Récuperer Arguments sur la ligne de commande ?
    Par Muetdhiver dans le forum x86 16-bits
    Réponses: 9
    Dernier message: 20/01/2003, 22h01
  4. Analyser la ligne de commande
    Par benj29 dans le forum C
    Réponses: 14
    Dernier message: 19/11/2002, 05h13

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