OVH Cloud OVH Cloud

os.exec{v|l} , ne pas sortir

4 réponses
Avatar
R12y
Bonjour,

Je fais un script python pour créer un certain nombre d'users syseme sous
Linux.

Je passe par

def create_user(login):
os.execv("useradd", ["/usr/sbin/useradd",..., login])

C'est plus court, et puis j'ai en réalité un code plus élaboré, mais je ne
présente qu'une version simplifiée. Entre autre, il y a entre ces deux
ligne la génération aléatoire du mot de passe, qui fonctionne comme je
veux.
Je place cette instruction dans une boucle du type:

prefix="group-sss-user-"
for i in range (50)
create_user(prefix+str(i))

Ce qui devrait me créer les user
group-sss-user-0
group-sss-user-1
....
group-sss-user-49

Le souci c'est que os.execv "exit" dès la première itération.
Ainsi, seul l'usr 0 est créé.
De plus, toutes les instructions situées après le os.execv sont ignorées
du faut de la "sortie".

Comment dire à ce script de ne pas sortir au execv?
Ou alors
Comment créer des users system avec python?

Je peux toujours y aller en hackant directement /etc/shadow et passwd,
mais useradd/userdel font très bien le travail. Pourquoi ne pas les
utiliser?

Merci.

--
Rakotomandimby Mihamina,
http://aspo.rktmb.org/activites/infogerance
Serveurs* sous Debian, Fedora...
(*) Serveurs!?: http://fr.search.yahoo.com/search?p=serveurs+dedies

4 réponses

Avatar
Amaury
Bonjour,

Je fais un script python pour créer un certain nombre d'users syseme sous
Linux.

Je passe par

def create_user(login):
os.execv("useradd", ["/usr/sbin/useradd",..., login])
...

Comment dire à ce script de ne pas sortir au execv?


execv est fait pour remplacer le process courant. Dans ton cas, essaie
d'utiliser une des fonctions os.spawn.

--
Amaury

Avatar
Christophe
Bonjour,

Je fais un script python pour créer un certain nombre d'users syseme sous
Linux.

Je passe par

def create_user(login):
os.execv("useradd", ["/usr/sbin/useradd",..., login])

C'est plus court, et puis j'ai en réalité un code plus élaboré, mais je ne
présente qu'une version simplifiée. Entre autre, il y a entre ces deux
ligne la génération aléatoire du mot de passe, qui fonctionne comme je
veux.
Je place cette instruction dans une boucle du type:

prefix="group-sss-user-"
for i in range (50)
create_user(prefix+str(i))

Ce qui devrait me créer les user
group-sss-user-0
group-sss-user-1
....
group-sss-user-49

Le souci c'est que os.execv "exit" dès la première itération.
Ainsi, seul l'usr 0 est créé.
De plus, toutes les instructions situées après le os.execv sont ignorées
du faut de la "sortie".

Comment dire à ce script de ne pas sortir au execv?
Ou alors
Comment créer des users system avec python?

Je peux toujours y aller en hackant directement /etc/shadow et passwd,
mais useradd/userdel font très bien le travail. Pourquoi ne pas les
utiliser?

Merci.



Utilise plutot le module subprocess de Python 2.4 si possible.

Avatar
R12y
On Tue, 08 Nov 2005 10:44:04 +0100, Christophe wrote:

Utilise plutot le module subprocess de Python 2.4 si possible.


Sur la machine en question je suis encore en 2.3
Et puis je suis en rtard dans la livraison du script, je vais faire avec
os.spawn*(), car je viens de faire des tests, et "ça marche".

Je verrais bien subprocss dans la prochaine version du script.

Merci à tous. :-)

--
Rakotomandimby Mihamina,
http://aspo.rktmb.org/activites/infogerance
Serveurs* sous Debian, Fedora...
(*) Serveurs!?: http://fr.search.yahoo.com/search?p=serveurs+dedies

Avatar
Christophe
On Tue, 08 Nov 2005 10:44:04 +0100, Christophe wrote:


Utilise plutot le module subprocess de Python 2.4 si possible.



Sur la machine en question je suis encore en 2.3
Et puis je suis en rtard dans la livraison du script, je vais faire avec
os.spawn*(), car je viens de faire des tests, et "ça marche".

Je verrais bien subprocss dans la prochaine version du script.

Merci à tous. :-)



Utilises quand même le module subprocess de Python 2.4 :) Il suffit de
copier le fichier et il marche très bien sous Python 2.3 si j'ai bien
compris.