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: récupérer le nombre avant % dans un fichier » Le 14/03/2015, à 22: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

#1 Re : -1 »  python: récupérer le nombre avant % dans un fichier » Le 15/03/2015, à 18: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%

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

totola
Réponses : 6

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

#3 -1 »  [Résolu] python: convertir string en float? » Le 14/03/2015, à 21: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!

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

totola
Réponses : 0

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

#6 -1 »  [Résolu] python: ChannelException: (1, 'Administratively prohibited') » Le 10/03/2015, à 18: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

#7 Re : -1 »  [Résolu] python: ChannelException: (1, 'Administratively prohibited') » Le 10/03/2015, à 23: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!

#8 -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 08: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!

#9 Re : -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 08: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..

#10 Re : -1 »  [Résolu] python et encodage utf-8 » Le 09/03/2015, à 10: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?

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

totola
Réponses : 7

OK merci!
Je valide l'utf8 alors!
smile

#13 Re : -1 »  ubuntu touch sur wave3 » Le 07/03/2015, à 22:02

totola
Réponses : 2

Bonjour,
ici tu as la liste des appareils supportés (ou en cours de développement non-officiel):

https://wiki.ubuntu.com/Touch/Devices

Il ne me semble pas avoir vu de Wave..

#14 -1 »  [Résolu] fusionner deux fichiers audio en ligne de commande » Le 06/03/2015, à 19:39

totola
Réponses : 4

Bonjour,
savez-vous s'il est possible et comment fusionner (mixer) deux fichiers audio (mp3) en ligne de commande?
En fait j'enregistre une conversation entre deux postes: un fichier contient l'enregistrement du poste 1 et un autre fichier contient l'enregistrement du poste 2... J'aimerais fusionner ces deux fichiers pour avoir la conversation complète.
Bon, c'est faisable avec audacity, mais j'aimerais pouvoir l'automatiser... Une idée?
Merci

#15 Re : -1 »  [Résolu] fusionner deux fichiers audio en ligne de commande » Le 06/03/2015, à 20:46

totola
Réponses : 4

Waouh... si facile... Youpi alors!!
Merci, faut que je teste ça!!

#16 Re : -1 »  [Résolu] fusionner deux fichiers audio en ligne de commande » Le 06/03/2015, à 21:03

totola
Réponses : 4

En effet, merci!
Avec le paquet libsox-fmt-mp3 ça marche nickel!
smile

#17 Re : -1 »  ligne de commande pour augmenter/récupérer le niveau d'entrée du micro » Le 17/02/2015, à 12:37

totola
Réponses : 7

Bonjour,
je reprends mon ancien fil car on reste dans le même sujet: j'aimerai maintenant récupérer la valeur du signal capté par le micro... du genre:

amixer -q -D pulse get Capture

mais ça ne fonctionne pas aussi simplement... hmm

Merci de l'aide!

#18 -1 »  python: changer couleur texte widget dynamiquement » Le 16/02/2015, à 15:53

totola
Réponses : 1

Bonjour,

j'ai un widget Tkinter Checkbutton


bouton1=Tkinter.Checkbutton(self,variable=retour1,onvalue=1, offvalue=0, text="Poste 1", fg=self.couleur[1])

avec self.couleur[1] qui peut changer (soit 'red', soit 'green') durant l’exécution du programme.

Comment faire pour que le changement de couleur soit effectif sur le texte du bouton?

Merci

#19 Re : -1 »  python: changer couleur texte widget dynamiquement » Le 16/02/2015, à 16:28

totola
Réponses : 1

J'ai trouvé comme ça:

def callbackcolor1():
	while(True):	
		bouton1.configure(fg=self.couleur[1])
		time.sleep(5)
tcolor = threading.Thread(target=callbackcolor)
tcolor.start()

Il y aurait mieux??

Merci

#20 Re : -1 »  [RÉSOLU] python: fonction avec argument » Le 14/02/2015, à 19:41

totola
Réponses : 10
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'

#21 Re : -1 »  [RÉSOLU] python: fonction avec argument » Le 14/02/2015, à 19:48

totola
Réponses : 10
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..

#22 Re : -1 »  [RÉSOLU] python: fonction avec argument » Le 15/02/2015, à 12:48

totola
Réponses : 10

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

#23 Re : -1 »  [RÉSOLU] python: fonction avec argument » Le 16/02/2015, à 14:28

totola
Réponses : 10
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

#24 Re : -1 »  [RÉSOLU] python: fonction avec argument » Le 16/02/2015, à 14:52

totola
Réponses : 10

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