Code de retour - Python - Programmation
Marsh Posté le 12-01-2010 à 14:22:28
Pour la deuxième partie de ma question, j'ai trouvé ça:
Code :
|
C'est pas mal, la dedans j'ai les erreurs python, j'ai essayé en remplaçant stderr par stdout donc, mais ça ne fonctionne toujours pas.
Je me demande: si comme j'appelle un os.system pour le scp, c'est peut être sh qui m'écrit l'erreur, est il possible dans ce cas de récupérer ça en python ?
edit: c'est effectivement le cas :s
Marsh Posté le 12-01-2010 à 16:13:05
Oskour
Faut pas utiliser os.system si tu as besoin de faire autre chose que "j'appelle un utilitaire basique et c'est tout".
Vas vite voir le contenu du module subprocess, vilain chenapan. D'ailleurs t'es même plus censé utiliser os.system en fait, subprocess.call et subprocess.check_call sont largement mieux.
Quand à la 2e partie de la question, ugh
Marsh Posté le 12-01-2010 à 16:55:32
masklinn a écrit : Oskour |
Oui je viens de voir ça.
(Dans la doc c'est pas écrit que c'est deprecié).
Avec le subprocess.call j'arrive à avoir le code retour (0 ou 1) mais pas le message du prompt (ce que je cherche).
Code :
|
Marsh Posté le 12-01-2010 à 17:27:39
Franchement, je te suggère de passer par paramiko (qui fait du sftp, même si ça gère pas le scp).
Sinon, http://bazaar.launchpad.net/~jbard [...] zz9ww66y-1 ou (plus gore) http://www.palovick.com/code/pytho [...] client.php
Marsh Posté le 13-01-2010 à 09:47:27
masklinn a écrit : Franchement, je te suggère de passer par paramiko (qui fait du sftp, même si ça gère pas le scp). |
C'est un peu sortir le porte-avion pour tuer une mouche.
J'ai pondu ça, ça fonctionne:
Code :
|
Marsh Posté le 13-01-2010 à 10:04:42
Tangrim a écrit :
|
Bah pas spécialement, paramiko ça marche bien et ça permet de pas faire des bricolages à la con en IPC avec des softs pas créés pour faire de l'IPC ou servir d'APIs.
Marsh Posté le 13-01-2010 à 10:48:17
masklinn a écrit : |
Tu m'as perdu :s
(IPS= Inter Processus Communication ?)
Je n'avais que cette partie de code qui me demandait d'utiliser des commandes shell, j'ai regardé un peu paramiko, mais je crois que (pour le moment) c'est un peu compliqué pour moi.
Marsh Posté le 13-01-2010 à 11:05:11
Tangrim a écrit : (IPS= Inter Processus Communication ?) |
ui
Marsh Posté le 13-01-2010 à 12:08:37
Tangrim a écrit :
|
bravo, sur 4 lignes, la seule qui est correct est la ligne vide...
Marsh Posté le 13-01-2010 à 12:40:15
KangOl a écrit : |
Tu peux m'expliquer le pourquoi ?
Sinon j'ai aussi réussi avec call, je ne vois pas trop ce que ça change.
Marsh Posté le 13-01-2010 à 13:41:44
1/ pas de
Code :
|
ca pollue le namespace global
2/ Popen peut prendre un tableau avec les arguments
3/ pourquoi faire la redirection manuellement ??
un code correct resemblerai à ça :
Code :
|
Marsh Posté le 13-01-2010 à 14:18:57
KangOl a écrit : 1/ pas de
ca pollue le namespace global
|
Merci.
Mais dans ton exemple sans la redirection manuelle la sortie du scp n'est pas enregistrée dans le fichier de log, stderr et stdout concernent les sortie python, pas celle du shell (en tout cas en testant c'est comme ça que je l'ai compris).
Spoiler : La dernière ligne aussi était bien ^^ |
Marsh Posté le 13-01-2010 à 14:22:06
tu peux récupérer le résultat de p.communicate()
tu peux aussi passer le paramètre shell a Popen
Marsh Posté le 13-01-2010 à 14:39:35
Code :
|
En effet j'ai bien le message désiré dans p.communicate, pas contre je n'arrive pas à recuperer ma phrase, je pensais que c'était une liste mais le __class__ me montre que non.
Marsh Posté le 13-01-2010 à 14:53:40
Tangrim a écrit :
En effet j'ai bien le message désiré dans p.communicate, pas contre je n'arrive pas à recuperer ma phrase, je pensais que c'était une liste mais le __class__ me montre que non. |
Faudrait peut-être penser à lire la docG
http://docs.python.org/library/sub [...] ommunicate
accessoirement, prière d'utiliser type(foo) pas foo.__class__ (qui est un détail d'implémentation):
Code :
|
Et le shell Python a une fonction "help" très pratique.
Marsh Posté le 13-01-2010 à 15:02:30
Un tuple !
Code :
|
Ça fontionne bien, merci beaucoup pour m'avoir "nettoyé" ce code.
Marsh Posté le 13-01-2010 à 15:16:03
Tangrim a écrit : Un tuple !
|
Je suggère aussi d'utiliser le tuple unpacking, parce que là c'esrt sale ton truc:
Code :
|
Marsh Posté le 13-01-2010 à 16:22:05
masklinn a écrit :
|
Je trouve ça moins lisible, mais puisque tu dis que ce n'est pas propre je vais suivre ton conseil .
Marsh Posté le 13-01-2010 à 17:12:39
Tangrim a écrit : |
t'as deux variables clairement nommées au lieu d'avoir une variable au nom qui ne veut rien dire avec deux index complètement arbitraires… en quoi c'est moins lisible
Marsh Posté le 13-01-2010 à 20:43:10
masklinn a écrit : |
Je m'y étais habitué, j'ai pleins de tuples dans une autre partie du programme, mais t'as raison quelque part.
Marsh Posté le 12-01-2010 à 10:20:08
Bonjour.
J'ai un programme python qui effectue de nombreuses requetes sur un base de données.
Existe-t-il une variable équivalente à $? en shell pour gérer les erreurs, je trouve assez lourds de faire ça avec if.
De même j'ai une portion de code telle que:
Est-il possible de récupérer l'erreur qui s'affiche dans le prompt en cas d'échec (pour mettre dans un fichier de log) ? Le code de retour est 256, ce qui est moins parlant que
"ssh: Could not resolve hostname monserveur: Name or service not known".
Merci pour vos réponses.
---------------
Des Bisous et des nounours ! | Internet 2025 | Dungeon-Generator