Python: Haciendo un pitido


Estoy tratando de que el programa me dé un pitido. Estoy en una máquina Windows. He mirado http://docs.python.org/library/winsound.html

Pero no estoy seguro de cómo puedo programar esto con un escáner de código de barras.

Aquí está mi código para el escáner de código de barras serie.

ser = serial.Serial()
ser.baudrate = 9600

#for windows
ser.port = 2 #for COM3

ser.open()
ser.write('hello')
ser.close()

ACTUALIZACIÓN: Ya que estoy molestando a mis compañeros de trabajo con el pitido. ¿Puedo hacer que llegue a través del conector de audio para auriculares?

Author: dsolimano, 2011-06-30

6 answers

En Windows, si solo quieres hacer que la computadora haga un pitido:

import winsound
frequency = 2500  # Set Frequency To 2500 Hertz
duration = 1000  # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)

El winsound.Beep() se puede usar donde quiera que se produzca el pitido.

 95
Author: CyanRook,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-16 09:16:03

La forma multiplataforma de hacer esto es print '\a'. Esto enviará el carácter ASCII Bell a stdout, y esperanzadamente generará un pitido (a para 'alert'). Tenga en cuenta que muchos emuladores de terminales modernos ofrecen la opción de ignorar los caracteres de campana.

Ya que estás en Windows, te alegrará saber que Windows tiene su propia API (prepárate) Beep, que te permite enviar pitidos de longitud y tono arbitrarios. Tenga en cuenta que esta es una solución solo para Windows, por lo que probablemente debería prefiera print '\a' a menos que realmente se preocupe por Hertz y milisegundos.

Se accede a la API Beep a través del módulo winsound : http://docs.python.org/library/winsound.html

 100
Author: jforberg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-06-30 16:07:16

Linux.

$ apt-get install beep

$ python
>>> os.system("beep -f 555 -l 460")

O

$ beep -f 659 -l 460 -n -f 784 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 880 -l 230 -n -f 659 -l 230 -n -f 587 -l 230 -n -f 659 -l 460 -n -f 988 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 1047-l 230 -n -f 988 -l 230 -n -f 784 -l 230 -n -f 659 -l 230 -n -f 988 -l 230 -n -f 1318 -l 230 -n -f 659 -l 110 -n -f 587 -l 230 -n -f 587 -l 110 -n -f 494 -l 230 -n -f 740 -l 230 -n -f 659 -l 460
 15
Author: YumYumYum,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-24 14:25:43

Estaba buscando lo mismo pero para Linux shell.

El tema me llevó a una respuesta, -gracias-

Tal vez más python manera :

import os
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x)
beep(3)

Notas:

  • el valor de suspensión (aquí 0.2), depende de la duración (segundos) de su pitido predeterminado
  • Elegí usar os.system en lugar de subprocess.Popen por simplicidad (podría ser malo)
  • la '- n ' de {[3] } es no tener más visualización
  • el último'; ' después de sleep es necesario para el resultado secuencia de texto (*x)
  • también probado a través de ssh en un término X
 10
Author: s4mdf0o1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-03 15:00:53

He hecho un paquete para ese propósito.

Puedes usarlo así:

from pybeep.pybeep import PyVibrate, PyBeep
PyVibrate().beep()
PyVibrate().beepn(3)
PyBeep().beep()
PyBeep().beepn(3)

Depende de sox y solo soporta python3.

 2
Author: qed,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-05 16:05:58

El camino multiplataforma:

import time
import sys
for i in range(1,6):
    sys.stdout.write('\r\a{i}'.format(i=i))
    sys.stdout.flush()
    time.sleep(1)
sys.stdout.write('\n')
 0
Author: foo bar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-13 11:36:02