Bonjour,
j’utilise le module fabric de python pour exécuter des commandes sur des postes distants avec une interface python (tkinter)… ça semble marcher bien, un temps du moins, mais au bout d’un moment (je n’arrive pas à savoir quand, ça paraît plus ou moins aléatoire), j’obtiens cette erreur, et je ne peux plus rien faire à part fermer brutalement le programme et le relancer:
[code] Warning: run() received nonzero return code 1 while executing ‘kill $(cat PIDpt.txt)’!
[172.16.125.12] run: kill $(cat PIDpt.txt)
Exception in Tkinter callback
Traceback (most recent call last):
File “/usr/lib/python2.7/lib-tk/Tkinter.py”, line 1413, in call
return self.func(*args)
File “PyPaFi3UTF8.py”, line 1396, in ParlerTous
effacer_tous(2)
File “PyPaFi3UTF8.py”, line 1343, in effacer_tous
run(“kill $(cat PIDpt.txt)”)
File “/usr/local/lib/python2.7/dist-packages/fabric/network.py”, line 647, in host_prompting_wrapper
return func(*args, **kwargs)
File “/usr/local/lib/python2.7/dist-packages/fabric/operations.py”, line 1054, in run
shell_escape=shell_escape)
File “/usr/local/lib/python2.7/dist-packages/fabric/operations.py”, line 921, in _run_command
channel=default_channel(), command=wrapped_command, pty=pty,
File “/usr/local/lib/python2.7/dist-packages/fabric/state.py”, line 397, in default_channel
chan = _open_session()
File “/usr/local/lib/python2.7/dist-packages/fabric/state.py”, line 389, in _open_session
return connections[env.host_string].get_transport().open_session()
File “/usr/local/lib/python2.7/dist-packages/paramiko/transport.py”, line 615, in open_session
max_packet_size=max_packet_size)
File “/usr/local/lib/python2.7/dist-packages/paramiko/transport.py”, line 740, in open_channel
raise e
ChannelException: (1, ‘Administratively prohibited’)[/code]
En cherchant un peu sur le net, ‘Adminitratively prohibited’ signifierait que l’hôte a refusé la connection ou quelque chose comme ça (c’est en english et assez technique…)
Ce que je ne comprends pas c’est le caractère aléatoire de l’erreur… ça marche très bien un bon bout de temps puis ça va se mettre à bloquer…
Pour info, j’ai la fonction suivante pour se connecter:
def connecter_ssh(numero):
env.host_string = '{}'.format(self.IP[numero])
env.user = '{}'.format(self.user[numero])
env.password = '{}'.format(self.passwd[numero])
et mes fonctions que je lance sont les suivantes:
[code] def parler_tous(poste):
if self.couleur[poste]==‘forestgreen’:
def callback():
connecter_ssh(poste)
with settings(warn_only=True):
run(“cvlc {} & echo $! > PIDpt.txt”.format(self.IP_multicast[0]))
self.tPt = threading.Thread(target=callback)
self.tPt.start()
else:
print(‘poste {} non connecté’.format(poste))
def effacer_tous(poste):
if self.couleur[poste]=='forestgreen':
connecter_ssh(poste)
print 'coucou'
with settings(warn_only=True):
run("kill $(cat PIDpt.txt)")
self.tPt._Thread__stop()
else:
print('poste {} non connecté'.format(poste))[/code]
J’ai rajouté un ‘coucou’ qui a l’air de bien s’executer, le problème est bien sur la commande run(“kill $(cat PIDpt.txt)”)…
Merci de votre aide