Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
nombre réponses : 25

#0 -1 »  python: lancer une application X sur poste distant » Le 09/06/2015, à 09:09

totola
Réponses : 0

Bonjour,
je fais un petit programme en python et j'aimerais qu'il puisse lancer une application graphique sur un poste distant. J'utilise le module fabric de python pour la connexion ssh. Voilà ma tentative de code:

### Lancer le module élève

		def lancer_module_eleve(num_poste):
			if self.couleur[num_poste] == 'forestgreen':
				connecter_ssh(num_poste)  #Se connecte au poste en utilisant le module fabric
				run('export DISPLAY=":0" & sh /home/crif/Pyrecord.py/Pyrecord')

			else:
				print('poste {} non-connecté'.format(str(num_poste)))
		
		def moduleEleve():
			lancer_module_eleve(1)
			lancer_module_eleve(2)
			lancer_module_eleve(3)
			lancer_module_eleve(4)
			lancer_module_eleve(5)
			lancer_module_eleve(6)
			lancer_module_eleve(7)
			lancer_module_eleve(8)
			
		
		buttonMod = Tkinter.Button(self,text="module élève",command=moduleEleve)		
		buttonMod.place(x=663, y=20, anchor="c")

Mais j'obtiens une erreur:

[172.16.125.11] run: export DISPLAY=":0" & sh /home/crif/Pyrecord.py/Pyrecord
[172.16.125.11] out: sh: 0: Can't open /home/crif/Pyrecord.py/Pyrecord
[172.16.125.11] out:


Fatal error: run() received nonzero return code 127 while executing!

Requested: export DISPLAY=":0" & sh /home/crif/Pyrecord.py/Pyrecord
Executed: /bin/bash -l -c "export DISPLAY=\":0\" & sh /home/crif/Pyrecord.py/Pyrecord"

Aborting.
run() received nonzero return code 127 while executing!

Requested: export DISPLAY=":0" & sh /home/crif/Pyrecord.py/Pyrecord
Executed: /bin/bash -l -c "export DISPLAY=\":0\" & sh /home/crif/Pyrecord.py/Pyrecord"
Exception in thread Thread-7:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
    self.run()
  File "/usr/lib/python2.7/threading.py", line 504, in run
    self.__target(*self.__args, **self.__kwargs)
  File "PyPaFi4.py", line 337, in callbackcolor1
    bouton1.configure(fg=self.couleur[1])
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1205, in configure
    return self._configure('configure', cnf, kw)
  File "/usr/lib/python2.7/lib-tk/Tkinter.py", line 1196, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
RuntimeError: main thread is not in main loop


alors si je me connecte en ssh -X sur le poste et que je lance les commandes:

export DISPLAY=":0"

puis

sh /home/crif/Pyrecord.py/Pyrecord

le programme se lance correctement sur le poste distant...

Merci pour votre aide!
smile

#1 -1 »  python: arrêter un thread » Le 11/03/2015, à 14:25

totola
Réponses : 11

Bonjour,
À chaque fois que j'avance un nouveau problème apparaît.. smile
Après avoir résolu le nombre max de session ssh; je bloque au problème du trop grand nombre de threads lancés (une centaine)... Je pensais bêtement que la commande "mon_thread._Thread__stop()" suffisait pour les arrêter, mais apparemment ce n'est pas le cas... à partir d'une centaine lancé j'ai l'erreur suivante:

  File "/usr/lib/python2.7/threading.py", line 494, in start     _start_new_thread(self.__bootstrap, ()) error: can't start new thread

voilà une partie de mon code incriminé:

		def parler_tous(poste):
			def callback():
				connecter_ssh(poste)
				with settings(warn_only=True):
					run("cvlc {} & echo $! > PIDpt.txt)
			self.tPt = threading.Thread(target=callback)
			self.tPt.start()

		def effacer_tous(poste):
			connecter_ssh(poste)
			with settings(warn_only=True):
				run("kill $(cat PIDpt.txt)")
			self.tPt._Thread__stop()

Et comme je lance ça sur 10 postes en même temps... Au bout de la dixième fois ça coince...

J'ai vu ça sur Internet:

To fix it you will need increase stack size limit in the shell:

# ulimit -s unlimited

Initially it was:

$ ulimit -s
8192

déjà ça ne marche pas (le problème est identique) et en plus l'idée ne me plaît qu'à moitié... J'aimerais bien pouvoir arrêter mes threads plutôt que d'en créer à l'infini...

Pourquoi "self.tPt._Thread__stop()" ne marche pas?

Merci!
smile

#2 Re : -1 »  python: arrêter un thread » Le 28/04/2015, à 11:03

totola
Réponses : 11

OK merci, j'avais déjà regardé dtach mais j'avais pas reussi et abandonné ... Je vais essayer ça!

Sinon, après quelques tests, ma technique semble fonctionner... Mais bon je ne trouve pas ça super joli, devoir créer ce fichier pid, puis le supprimer... Et surtout je n'ai pas une grande confiance dans la fiabilité et la robustesse de ma méthode..
Dans l'idéal j'aimerais bien me passer de ce fichier d'ailleurs..

Merci pour les pistes, j'ai déjà bien avancé dans tous les cas!! smile

#3 Re : -1 »  python: arrêter un thread » Le 28/04/2015, à 19:34

totola
Réponses : 11
grim7reaper a écrit :

Salut,
Quelque chose dans ce genre là peut-être :

run("dtach -n /tmp/cvlc_bg -Ez cvlc {} & echo $! > PID1.txt".format(self.IP_multicast[0]))

C'est pareil... apparemment vlc se lance bien mais ça fait la même chose..
Mais comme je ne maîtrise pas dtach... Il faut vraiment que je me penche sérieusement là-dessus pour essayer d'adapter.
Merci en tout cas, j'ai quand même déjà bien avancé grâce à toi!

#4 Re : -1 »  python: arrêter un thread » Le 25/04/2015, à 11:10

totola
Réponses : 11

Salut et merci de la réponse !
En fait je fais une sorte de 'labo de langue' pour des profs d'anglais, cad que le prof puisse écouter et parler a des postes qu'il choisit...
Tout ça fonctionne avec avconv et cvlc sur des IP multi ast.
Chaque action (parler a un poste, écouter un autre, mettre en communication 2 postes élèves...etc) necessitent un petit thread qui contient au max 2 commande avconv (pour diffuser l'audio d'un poste sur le réseau) et une cvlc (pour écouter l'audio diffusé). Quand le prof arrête d'écouter, je 'tue' le processus VLC en ayant préalablement récupéré son pid...
Ça marche bien mais je n'arrête pas le thread (qui reste 'vide') et au bout d'un moment ça coince...
Notamment si j'utilise ma fonction 'parler a tous' qui créé une dizaine de threads a la fois ( au bout du dixième appel il coince ' too many thread'... Ou QQ chose comme ça..)
Merci de t'intéresser a mon problème... J'avoue qu'après avoir bien avancé j'ai un peu baissé les bras juste a cause de ça!
wink

#5 Re : -1 »  python: arrêter un thread » Le 27/04/2015, à 10:23

totola
Réponses : 11

Salut et merci pour la réponse!
En effet, ça peut m'intéresser... Je regarde ça.

En attendant je détaille un peu plus mon exemple de thread que je lance:

### exemple pour écouter un poste élève depuis le poste prof:
def callback1E():
	os.system('cvlc {} & echo $! > PID1e.txt &'.format(self.IP_multicast[1]))    #lance cvlc (et récupère son PID) sur le poste prof en écoute sur l'IP
	connecter_ssh(1)                                                                  #se connecte sur le poste via ssh (module fabric de python)
	with settings(warn_only=True):
		run("avconv -f alsa -i hw:0,0 -acodec mp2 -b 128k -f rtp {}".format(self.IP_multicast[1]))   #envoie le signal du micro sur l'IP
self.t11 = threading.Thread(target=callback1E)
self.t11.start()

ça c'est pour écouter, pour parler j'inverse cvlc et avconv...
Mais du coup je pourrais utiliser subprocess dans ce cas-là??

#6 Re : -1 »  python: arrêter un thread » Le 27/04/2015, à 15:19

totola
Réponses : 11

Salut,
la fonction run() vient du module fabric:

www.fabfile.org

elle lance via ssh la commande contenue à l'intérieur... une sorte de os.system() sur un poste distant.
en fait les commandes avconv ne se terminent pas en principe (seulement à la fermeture du programme), j'avais même pensé les lancer toutes en même temps à l'ouverture du programme car j'avais peur que le programme plante lorsqu'on relance plusieurs fois la même commande avconv (pour écouter un poste puis un autre...). En réalité si avconv est déjà lancé (en fait si hw:0,0 est déjà occupé), avconv renvoie juste une erreur qui n'est pas bloquante. De cette façon lorsqu'on lance la commande avconv, si ce n'est pas déjà fait, elle démarre l'envoie du signal micro sur l'IP multicast sinon elle renvoie une erreur et passe à la suite... ce qui me convient car cela laisse la possibilité d'allumer ou de redémarrer un poste sans être obligé de relancer le programme.

Avec tout ce que tu me dis là je crois comprendre ce qui cloche, j'ai en réalité un autre problème avec le PID que j'ai contourné de manière pas tout à fait académique... Je m'explique. Pour une raison que j'ignore, la commande suivante qui est dans mon thread:

run("cvlc IP & echo $! > PID5p.txt")

ne fonctionne pas, impossible de récupérer le PID de quelque manière que ce soit, j'ai l'impression que le programme bloque là-dessus et n'exécute plus rien ensuite dans le thread... Alors que si je place une boucle infinie derrière, ça marche bien:

run("cvlc IP & echo $! > PID5p.txt | while (true) do sleep 500; done")

du coup, ça doit être pour ça que les threads ne s'arrêtent pas... Il faudrait que j'arrive à régler proprement ce problème et peut-être que ça me réglerait le reste... non??

À vrai dire j'ai un fil ouvert là-dessus et on m'a indiqué cette page, mais je n'ai pas tout compris..

http://www.fabfile.org/faq.html#why-can … abric-hang

plus de détail ici:
https://www.debian-fr.org/recuperer-pid … 51159.html

#7 Re : -1 »  python: arrêter un thread » Le 27/04/2015, à 23:52

totola
Réponses : 11

Alors, après essais, si ma commande run se termine, pas de soucis je peux bien afficher qq chose avec un print... Par contre si je laisse la boucle infinie dans le run, rien ne se passe ensuite (logique).

Par contre, il y a autre chose que je ne comprends absolument pas... C'est cette histoire de PID:

Par exemple, si j'execute:

def callback1():
	connecter_ssh(1)
	run("cvlc {} & echo $! > PID1.txt | while (true) do sleep 500; done".format(self.IP_multicast[0]))
self.t = threading.Thread(target=callback1)
self.t.start()

un cat PID1.txt me donne 12253

un ps -aux me donne bien un processus vlc avec le bon pid:

lavaren+ 12246  0.0  0.0  16652  1464 pts/26   Ss+  23:40   0:00 /bin/bash -l -c cvlc 
lavaren+ 12253  0.5  0.3 440656 13092 pts/26   Sl+  23:40   0:00 /usr/bin/vlc -I dummy
lavaren+ 12255  0.0  0.0  16652   608 pts/26   S+   23:40   0:00 /bin/bash -l -c cvlc 
lavaren+ 12257  0.0  0.0  11424   612 pts/26   S+   23:40   0:00 sleep 500

puis je le tue:

	connecter_ssh(1)
	run("kill $(cat PID1.txt)")

il disparaît bien:

lavaren+ 12246  0.0  0.0  16652  1464 pts/26   Ss+  23:40   0:00 /bin/bash -l -c cvlc 
lavaren+ 12255  0.0  0.0  16652   608 pts/26   S+   23:40   0:00 /bin/bash -l -c cvlc 
lavaren+ 12257  0.0  0.0  11424   612 pts/26   S+   23:40   0:00 sleep 500

au passage je ne sais pas ce que sont les /bin/bash -l -c cvlc qui restent..?? Et le sleep 500 c'est ma boucle infinie qui fait que le thread perdure...

Alors, oui, vous me direz pourquoi donc mettre ce sleep 500 en boucle... C'est vrai que c'est plutôt tordu comme idée... Soit. Enlevons-le:

def callback1():
	connecter_ssh(1)
	run("cvlc {} & echo $! > PID1.txt".format(self.IP_multicast[0]))
self.t = threading.Thread(target=callback1)
self.t.start()

un cat PID1.txt donne cette fois-ci 13358

mais pas de trace de vlc :

root     13310  0.3  0.1 124368  4484 ?        Ss   23:47   0:00 sshd: lavarenne [priv
lavaren+ 13351  0.0  0.0 124368  2116 ?        S    23:47   0:00 sshd: lavarenne@notty
lavaren+ 13453  0.0  0.0   6500   632 pts/10   S+   23:48   0:00 ping -c 2 192.168.1.1
lavaren+ 13472  0.0  0.0  22684  1328 pts/0    R+   23:48   0:00 ps -aux

du coup le kill ne tue plus rien, là je suis perdu... c'est quoi ce bazar???
Je pense que le coeur de mon problème est ici et que le rajout de la boucle infinie est une fausse solution au problème du pid et que c'est ce qui m'empêche la fermeture correcte de mes threads.. possible??

Merci de l'aide!
smile


[edit]
Tiens, ne serait-il pas possible que la fin de la commande run() entraîne la fermeture du thread et du coup le processus vlc lancé serait mort-né???

[edit2]
Il y a bien un truc comme ça... Si je mets sleep 10 à la place de la boucle infinie, ça marche 10 secondes et mon processus vlc disparaît tout seul...
Apparemment, la fin de la commande run entraîne la mort de mon vlc... hmm

[edit3]
Bon, l'idée serait d'attendre tant que le fichier PID1.txt existe et s'il est supprimé (après le kill) de sortir de la boucle:

run("cvlc {} & echo $! > PID1.txt | while (true) do if [ -f PID1.txt ]; then sleep 1;else break; fi; done".format(self.IP_multicast[0]))

et en rajoutant un rm PID1.txt après le kill, j'ai l'impression que ça fonctionne... En tout cas ps -aux ne me donne plus de signe de vie de quoi que ce soit à l'intérieur de mon thread... smile

Mais pfff, il n'y aurait pas plus simple???
En plus je ne peux pas tester en conditions réelles (vacances..) hmm

Je suis preneur de toutes vos idées... Merci et bravo à ceux qui auront lu ce message jusqu'au bout..!! wink

#8 -1 »  montage vidéo et effets spéciaux » Le 08/04/2015, à 14:57

totola
Réponses : 11

Bonjour,
J'essaie de faire un petit montage vidéo avec quelques effets spéciaux, du genre apparition d'une vidéo en vignette (par dessus la premiere) en zoomant ou en tournant...
J'essaie avec kdenlive, j'arrive a superposer mes deux vidéos avec la taille que je veux mais je n'arrive pas a animer l'apparition...
Est ce possible avec un logiciel comme kdenlive?
Merci

#9 Re : -1 »  montage vidéo et effets spéciaux » Le 08/04/2015, à 20:51

totola
Réponses : 11

Merci pour vos réponses !
Fouduroi, tu parles de kdenlive?

#10 Re : -1 »  montage vidéo et effets spéciaux » Le 11/04/2015, à 19:25

totola
Réponses : 11

Merci SESTAY,
c'est en effet le genre de chose que je veux faire! smile

#11 Re : -1 »  montage vidéo et effets spéciaux » Le 11/04/2015, à 20:59

totola
Réponses : 11
SESTAY a écrit :

bonjour
avec ffDiaporama aussi vous disposez de nombreux effets.
Un petit exemple pour les effets proposé dans le premier post.(apparition d'une vidéo incrusté avec un effet de rotation)

https://www.dropbox.com/s/pa6geb59qknrw … n.mp4?dl=0

Bonsoir,
j'ai juste une petite question concernant ffdiaporama: j'arrive bien à rajouter mon image ou ma vidéo en "vignette" par-dessus mon clip mais impossible de trouver l'option pour dire à partir de quand apparaître et quand disparaître...
Merci

#12 Re : -1 »  montage vidéo et effets spéciaux » Le 12/04/2015, à 12:42

totola
Réponses : 11

Merci !!
Je vais essayer ça!
smile

#13 Re : -1 »  montage vidéo et effets spéciaux » Le 12/04/2015, à 12:46

totola
Réponses : 11

Merci pour tout ces docs!
Je te tiendrais au courant si j'ai réussi a faire ce que je veux (ça a l'air bien parti)
smile

#14 Re : -1 »  python: récupérer le nombre avant % dans un fichier » Le 15/03/2015, à 19:58

totola
Réponses : 6

Oui ça marche avec sed -nr...
Merci! smile

#15 -1 »  python: récupérer le nombre avant % dans un fichier » Le 14/03/2015, à 23:59

totola
Réponses : 6

bonsoir,

la commande :

arecord -D hw:0 -c 2 -d 0 -f S16_LE -vvv /dev/null | grep %

me génère une sortie de ce type:

$ arecord -D hw:0 -c 2 -d 0 -f S16_LE -vvv /dev/null | grep %
Capture WAVE '/dev/null' : Signed 16 bit Little Endian, Frquence 8000 Hz, Stro
Avertissement: la frquence n'est pas prcise (demand = 8000Hz,
obtenu = 44100Hz)
         veuillez essayez le greffon de branchement 
Hardware PCM card 0 'HDA Intel' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 16
  buffer_size  : 16384
  period_size  : 4096
  period_time  : 92879
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 4096
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 16384
  silence_threshold: 0
  silence_size : 0
  boundary     : 1073741824
  appl_ptr     : 0
  hw_ptr       : 0
Pic max. (8192 chantillons): 0x00000071 #                    0%
Pic max. (8192 chantillons): 0x00000056 #                    0%
Pic max. (8192 chantillons): 0x00000060 #                    0%
Pic max. (8192 chantillons): 0x000000b7 #                    0%
Pic max. (8192 chantillons): 0x00000129 #                    0%
Pic max. (8192 chantillons): 0x000000de #                    0%
Pic max. (8192 chantillons): 0x00000047 #                    0%
Pic max. (8192 chantillons): 0x00000056 #                    0%
Pic max. (8192 chantillons): 0x00000095 #                    0%
Pic max. (8192 chantillons): 0x000000a1 #                    0%
Pic max. (8192 chantillons): 0x0000011b #                    0%
Pic max. (8192 chantillons): 0x000000a7 #                    0%
Pic max. (8192 chantillons): 0x0000016f #                    1%
Pic max. (8192 chantillons): 0x0000009a #                    0%
Pic max. (8192 chantillons): 0x00000074 #                    0%
Pic max. (8192 chantillons): 0x000000fb #                    0%
Pic max. (8192 chantillons): 0x00000051 #                    0%
Pic max. (8192 chantillons): 0x00000073 #                    0%
Pic max. (8192 chantillons): 0x00000088 #                    0%
Pic max. (8192 chantillons): 0x0000022d #                    1%
Pic max. (8192 chantillons): 0x00000126 #                    0%
Pic max. (8192 chantillons): 0x00000109 #                    0%
Pic max. (8192 chantillons): 0x00000211 #                    1%
Pic max. (8192 chantillons): 0x000001bf #                    1%
Pic max. (8192 chantillons): 0x00000048 #                    0%
Pic max. (8192 chantillons): 0x000000c4 #                    0%
Pic max. (8192 chantillons): 0x000000f5 #                    0%
Pic max. (8192 chantillons): 0x000003f9 #                    3%
Pic max. (8192 chantillons): 0x000003f3 #                    3%
Pic max. (8192 chantillons): 0x00000327 #                    2%
Pic max. (8192 chantillons): 0x0000138c ####                 15%
Pic max. (8192 chantillons): 0x000015ca ####                 17%

J'aimerais juste récupérer la valeur avant le %

Je vois pas trop comment faire
Merci

#16 Re : -1 »  python: récupérer le nombre avant % dans un fichier » Le 15/03/2015, à 19:32

totola
Réponses : 6

Bonjour et merci de la réponse..
J'obtiens ça:

$ arecord -D hw:1 -c 2 -d 0 -f S16_LE -vvv /dev/null | grep -Po '[0-9]+(?=%)'
Capture WAVE '/dev/null' : Signed 16 bit Little Endian, Fréquence 8000 Hz, Stéréo
Avertissement: la fréquence n'est pas précise (demandé = 8000Hz,
obtenu = 44100Hz)
         veuillez essayez le greffon de branchement 
Hardware PCM card 1 'HD-Audio Generic' device 0 subdevice 0
Its setup is:
  stream       : CAPTURE
  access       : RW_INTERLEAVED
  format       : S16_LE
  subformat    : STD
  channels     : 2
  rate         : 44100
  exact rate   : 44100 (44100/1)
  msbits       : 16
  buffer_size  : 16384
  period_size  : 4096
  period_time  : 92879
  tstamp_mode  : NONE
  period_step  : 1
  avail_min    : 4096
  period_event : 0
  start_threshold  : 1
  stop_threshold   : 16384
  silence_threshold: 0
  silence_size : 0
  boundary     : 4611686018427387904
  appl_ptr     : 0
  hw_ptr       : 0
 2%
 3%
 2%
 2%
 1%
 2%
 1%
 2%
 1%
 2%
 2%
 2%
 5%
 2%
 1%
 1%
 2%
 2%
 2%
 2%
 1%
 2%
 2%
 2%

#17 -1 »  [Résolu] python: convertir string en float? » Le 14/03/2015, à 22:58

totola
Réponses : 2

Bonjour,

j'ai un petit problème avec ce code python:

self.niv = os.system("rec -n stat trim 0 .01 2>&1 | awk '/^Maximum amplitude/' | cut -d':' -f2 | sed 's/ //g'")
print self.niv*100

Je pense que c'est parce que je récupère une valeur de type string et du coup la multiplication ne marche pas..
C'est peut-être tout con, mais je ne trouve pas comment faire... smile

J'ai évidemment essayé float(os.system("...")) mais sans succès...

Merci!

#19 -1 »  [Résolu] python: ChannelException: (1, 'Administratively prohibited') » Le 10/03/2015, à 19:50

totola
Réponses : 1

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:


 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')

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:

		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))

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
smile

#20 Re : -1 »  [Résolu] python: ChannelException: (1, 'Administratively prohibited') » Le 11/03/2015, à 00:45

totola
Réponses : 1

ça ne serait pas un truc comme ça:

http://tracker.ceph.com/issues/9908

I had the same issue, so i understood that my Linux box was not allowing more than 10 sessions, so i added
Maxsession 100 in/etc/ssh/sshd_config and it restarted the service, and now Paramiko is able to make more than 10 concurrent session.

Par contre je ne trouve pas Maxsession dans /etc/ssh/sshd_config..

[edit]
Bah je l'ai rajouté à la fin du fichier... Par contre ça à l'air d'être:

Maxsessions 100

Et ça à l'air de marcher, je ne retrouve plus cette erreur!

#21 -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 09:03

totola
Réponses : 7

Bonjour,
je ne m'en sors plus avec l'encodage et python...
jusqu'à présent j'avais:

#!/usr/bin/python
# -*- coding: iso-8859-1 -*-

et j'utilisais le u"éàè" pour faire afficher un texte avec accents...

seulement, j'ai un problème lorsque je lance une commande qui contient un chemin avec des accents

put('{}'.format(self.path), "/home/{}".format(bureau))

self.path contient par exemple quelque chose comme '/home/user/mémoire':


UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 19: ordinal not in range(128)

Du coup, j'ai essayé de modifier l'encodage global (dans l'en-tête):

#!/usr/bin/python
# -*- coding: utf-8 -*-

et j'enlève tous les petits 'u' mais je n'ai plus aucun texte qui contient un accent qui s'affiche en sortie... Et toujours la même erreur avec mon chemin accentué..
Donc que dois-je garder dans l'en-tête utf-8 ou l'autre? Et comment régler mon problème de chemin accentué..?

Merci!

#22 Re : -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 09:33

totola
Réponses : 7

Bon j'ai trouvé pour le chemin en fouillant dans /usr et en regardant un exemple d'un programme en python:

self.path_utf8 = self.path.encode('utf8')

Par contre l'exemple que je regarde a bien un en-tête en utf-8 et apparemment pas de problèmes dans l'affichage des textes accentués... Contrairement à moi..

#23 Re : -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 11:16

totola
Réponses : 7

Ah oui... c'est pas bête! wink
J'utilise Geany: Documents ---> Définir l'encodage
Et ça roule! smile

Merci!

PS: Mais est ce qu'il vaut mieux choisir utf-8 pour tout?

#24 Re : -1 »  [Résolu] python et encodage utf-8 » Le 10/03/2015, à 00:26

totola
Réponses : 7

OK merci!
Je valide l'utf8 alors!
smile