Python: fonction et argument

Bonjour,
tout d’abord merci car grâce à vous j’ai réussi à faire ce que je voulais! :slightly_smiling:
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… :confused:

Merci

Tu as un problème de conception : tu as nommé tes widgets avec des numéros. Tu aurais pu faire une liste de widgets, comme ça par exemple :

Note que je ne me souviens pas de la façon d’instancier des boutons Tkinter, il faudra que tu remplaces. L’idée reste de les grouper dans une liste, ce qui te permettra par la suite cette fonction :

def effacer(num_poste): bureau = "{0}{1}".format("UserBureau", poste[num_poste].get()) ConnecterSSH(num_poste) run("rm -r /home/{}".format(bureau))
Note que ceci peut être risqué : tu n’es pas à l’abri d’injection Bash. Par exemple, si l’utilisateur peut renseigner dans ton widget poste2 le texte : “2 ; rm -rf /”, tu vas ensuite exécuter la commande :

Autre remarque, selon la convention en vigueur, les fonctions doivent être en minuscules avec des underscores :
connecter_ssh et non ConnecterSSH
effacer et non Effacer
Tout ça est détaillé dans le bouquin de Tarek Ziadé (Conception Python, je crois).

Ah oui super, ça paraît plus logique en effet!
Je vais tester ça…
Merci également pour les conventions d’écriture, tant qu’à faire, autant les respecter!

Pour le rm -rf /, la commande n’est pas lancé avec les droits root, donc ça ne devrait pas fonctionner non?

Super, ça marche en effet!
Merci…

Mais attends, je ne vais pas tarder à revenir sur un sujet similaire… :slightly_smiling:

A+

Et ça… Comment vais-je faire pour simplifier… ??


def callback():
	connecter_ssh(str(poste1))
	with settings(warn_only=True):
		run('cvlc rtp://226.0.0.12:1234 & echo $! > PID12c.txt | avconv -f alsa -i hw:0,0 -acodec mp2 -b 128k -f rtp rtp://226.0.0.11:1234 | while (true) do sleep 500; done')
t1 = threading.Thread(target=callback)
t1.start()
				
				
def callbackbis():
	connecter_ssh(str(poste2))
	with settings(warn_only=True):
		run('cvlc rtp://226.0.0.11:1234 & echo $! > PID12c.txt | avconv -f alsa -i hw:0,0 -acodec mp2 -b 128k -f rtp rtp://226.0.0.12:1234 | while (true) do sleep 500; done')
t2 = threading.Thread(target=callbackbis)
t2.start()

J’aimerais bien résumer tout ça par une fonction connecter(poste1,poste2)
Pour ça, il faudrait trouver une solution pour écrire dans la fonction rtp://226.0.0.1’poste2’:1234 | …etc.

Merci pour l’aide!

J’ai bon?? :slightly_smiling:

command="{0}{1}{2}{3}{4}{5}{6}".format('cvlc rtp://226.0.0.1',str(poste2),':1234 & echo $! > PID',str(poste1)+str(poste2),'c.txt | avconv -f alsa -i hw:0,0 -acodec mp2 -b 128k -f rtp rtp://226.0.0.1',str(poste1),':1234 | while (true) do sleep 500; done')
connecter_ssh(str(poste1))
run("{}".format(command))

ça a l’air de marcher en tout cas (je ne peux pas vraiment faire de test en conditions réelles, mais ça à l’air bon!)

Merci Seb-ksl pour tout ce que tu m’as appris déjà!
A+

PS: j’ai déjà gagné déjà plus de 1000 lignes… :wink: