Forum Programmation.python Adaptation d'un script perl

Posté par .
Tags : aucun
2
2
oct.
2008
Bonjour,
dans le but de créer en masse des entrées dans un annuaire ldap, je dois adapter le bout de code PERL suivant (qui fonctionne) en python :

open PWD, "|smbldap-passwd $uname 2>/dev/null 1>&2";
print PWD, "$password\n$password";
close PWD

(cette partie fait bien sur suite à l'appel de smbldap-useradd, on a besoin d'un PIPE car la commande demande confirmation du mot de passe)

En python, je n'ai pas de problème pour utiliser la méthode call de subprocess dans le cas où je n'attends pas de retour de la commande lancée mais j'ai plus de mal avec Popen (pour les PIPE par exemple).
Ce que je crois avoir compris :

from subprocess import Popen, PIPE
ls = Popen(["ls"],stdout=PIPE)
stdout, stderr = ls.communicate()

agit sur sur sdout (on récupère simplement la sortie), ce qui permet ensuite de rediriger le flux vers une entrée comme dans

p1 = Popen(["dmesg"],stdout=PIPE)
p2 = Popen(["grep","hda"],stdin=p1.stdout,stdout=PIPE)
output,error=p2.communicate()

Je serai donc tenté de modifier le bout de code en

e1 = Popen(['echo "%s\n%s" ' % (password,password)], stdout=PIPE)
e2 = Popen(["smbldap-password ","%s" % login],stdin=e1.stdout, stdout=PIPE)
output = e2.communicate()[0]

Qu'en pensez-vous (je n'ai pas encore de serveur de test, j'aimerais ne pas prendre trop de risque) ?
Merci
  • # 1er Popen inutile?

    Posté par (page perso) . Évalué à 3.

    Je supprimerais le premier Popen (inutile à mon avis, voir la doc de communicate).
    smbldap_password_p = Popen(["smbldap-password ","%s" % login],stdin=PIPE)
    smbldap_password_p.communicate("%s\n%s" % (password, password))
    
    • [^] # Re: 1er Popen inutile?

      Posté par . Évalué à 1.

      Merci beaucoup, je m'en suis grâce à ton aide sorti avec :
      smbp = subprocess.Popen("smbldap-passwd %s 2>/dev/null 1>&2" % (self.login), stdin=subprocess.PIPE, shell=True)
      smbp.communicate("%s\n%s" % (self.password, self.password))

      Merci encore
      Bye

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.