Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 14/02/2015, à 18:32

totola

[RÉSOLU] python: fonction avec argument

Bonjour,
tout d'abord merci car grâce à vous j'ai réussi à faire ce que je voulais! smile
Maintenant je suis dans la simplification et la réécriture de mon programme. Pour celà j'essaie de définir le maximum de fonctions.
J'aimerai donc définir une fonction avec le bout de code suivant avec comme argument un nombre (2 ici):


p2=poste2.get()
ConnecterSSH(str(2))
run("rm -r /home/{}".format(UserBureau + p2))

J'aimerai que ma fonction Effacer(numero) execute ce code simplement avec Effacer(2). Seulement je bloque... hmm

Merci

Dernière modification par totola (Le 16/02/2015, à 14:53)

Hors ligne

#2 Le 14/02/2015, à 18:57

pingouinux

Re : [RÉSOLU] python: fonction avec argument

Bonsoir,
Si j'ai bien compris

def Effacer(valeur) :
    p2=poste2.get()
    ConnecterSSH(str(valeur))
    run("rm -r /home/{}".format(UserBureau + p2))

Hors ligne

#3 Le 14/02/2015, à 19:03

totola

Re : [RÉSOLU] python: fonction avec argument

Oui, merci, ça j'arrive, mais j'aimerais aussi remplacer tous les autres 2, genre:

def Effacer(valeur) :
    p"valeur"=poste"valeur".get()
    ConnecterSSH(str(valeur))
    run("rm -r /home/{}".format(UserBureau + p"valeur"))

C'est là où je bloque...

Merci

Hors ligne

#4 Le 14/02/2015, à 19:19

pingouinux

Re : [RÉSOLU] python: fonction avec argument

À tester (exec est une commande potentiellement dangereuse) :

def Effacer(valeur) :
    cmd='''p%d=poste%d.get()
ConnecterSSH(str(%d))
run("rm -r /home/{}".format(UserBureau + p%d))'''%((valeur,)*4)
    exec(cmd)

Hors ligne

#5 Le 14/02/2015, à 19:26

D@mien.

Re : [RÉSOLU] python: fonction avec argument

Salut
Et comme çà?

def Effacer(valeur) :
    main = __import__('__main__')
    klass = main.__dict__['post'+value]
    value=main.__dict__["p"+valeur]=klass.get()
   [...]

:wq!

Hors ligne

#6 Le 14/02/2015, à 19:41

totola

Re : [RÉSOLU] python: fonction avec argument

D@mien. a écrit :

Salut
Et comme çà?

def Effacer(valeur) :
    main = __import__('__main__')
    klass = main.__dict__['post'+value]
    value=main.__dict__["p"+valeur]=klass.get()
   [...]

ça ne serait pas plutôt:

main = __import__('__main__')
klass = main.__dict__['poste'+str(valeur)]
value=main.__dict__["p"+str(valeur)]=klass.get()

Mais ça produit une erreur:

klass = main.__dict__['poste'+str(valeur)]
KeyError: 'poste1'

Hors ligne

#7 Le 14/02/2015, à 19:48

totola

Re : [RÉSOLU] python: fonction avec argument

pingouinux a écrit :

À tester (exec est une commande potentiellement dangereuse) :

def Effacer(valeur) :
    cmd='''p%d=poste%d.get()
ConnecterSSH(str(%d))
run("rm -r /home/{}".format(UserBureau + p%d))'''%((valeur,)*4)
    exec(cmd)

Oui... j'ai une erreur avec la commande exec..

Hors ligne

#8 Le 14/02/2015, à 23:28

D@mien.

Re : [RÉSOLU] python: fonction avec argument

Re

totola a écrit :

ça ne serait pas plutôt:
'

C'était qu'un exemple écrit par dessus la citation.

Par contre, on voit que mon python est rouillé, la fonction `globals()` est fait pour çà si l'objet se trouve dans le namespace smile

class abc1():
	pass

abc2 = abc1()

abc3 = "une variable"

def abc4():
	pass

def getobj(var):
    print(globals()['ab'+var])

getobj('c1')
getobj('c2')
getobj('c3')
getobj('c4')
# <class 'test.test.abc1'>
# <test.test.abc1 object at 0x7f8164caf320>
# une variable
# <function abc4 at 0x7f8164d35d08>

:wq!

Hors ligne

#9 Le 15/02/2015, à 12:48

totola

Re : [RÉSOLU] python: fonction avec argument

J'ai trouvé quelque chose qui me convient:

D'abord faire une liste:

poste = [Tk.Entry(..), Tk.Entry(...), ...]etc...

Puis ma fonction:

def effacer(num_poste):
    bureau = "{0}{1}".format("UserBureau", poste[num_poste].get())
    run("rm -r /home/{}".format(bureau))

Et voilà,
Merci à tous pour les pistes

Dernière modification par totola (Le 15/02/2015, à 12:49)

Hors ligne

#10 Le 16/02/2015, à 14:28

totola

Re : [RÉSOLU] python: fonction avec argument

D@mien. a écrit :

Re

Par contre, on voit que mon python est rouillé, la fonction `globals()` est fait pour çà si l'objet se trouve dans le namespace smile

class abc1():
	pass

abc2 = abc1()

abc3 = "une variable"

def abc4():
	pass

def getobj(var):
    print(globals()['ab'+var])

getobj('c1')
getobj('c2')
getobj('c3')
getobj('c4')
# <class 'test.test.abc1'>
# <test.test.abc1 object at 0x7f8164caf320>
# une variable
# <function abc4 at 0x7f8164d35d08>

Salut,

En fait je n'ai pas bien compris ton exemple... Mais j'ai l'impression qu'il peut me servir pour ce que je veux faire:
J'ai une fonction qui ping une adresse ip et qui doit me renvoyer une valeur correspondante à une couleur (red ou green) en fonction de la réponse du ping

def execute(option,numero):
			
	result = subprocess.call(['ping', option, '192.168.1.{}'.format(str(numero))])
	if not result:
		print("Address OK")
		couleur1='green'
	else:
		print("Address KO")
		couleur1='red'
OS = sys.platform

option = '-c 1' if OS != 'win32' else ''

execute(option,1)

ça marche mais j'aimerais maintenant que la variable se nommeen fonction de l'argument 'numero' du genre:

couleur+str(numero) = 'green'

Je n'arrive pas à comprendre ton exemple, mais j'ai l'impression qu'il doit le permettre... smile

Merci

Hors ligne

#11 Le 16/02/2015, à 14:52

totola

Re : [RÉSOLU] python: fonction avec argument

Bon, de la même façon qu'avant, j'ai une liste avec les couleur = ['red','red,'red,...]

puis

def execute(option,numero):
...
	if not result:
		...
		couleur[numero]='green'
	else:
...
		couleur[numero]='red'
...

Et voilà... Youpi smile

Hors ligne