Jump to content

[Resolvido][ Duvida ] Como detectar se uma tecla é pressionada?


Recommended Posts

Posted

Boas. Estou a fazer um programa para linha de comandos em python. Como posso saber se uma tecla é pressionada?

Estou a tentar fazer uma coisa do género:

def handler(signum, frame):
print 'Handlerl'
sys.exit()

signal.signal(signal.SIGALRM, handler)
signal.alarm(5)	

...mas em vez de um alarme ( signal.alarm(5) ) , quero que a função handler seja executada quando carrego em uma determinada tecla! Alguém pode ajudar? Cumprimentos

Posted

Tens duas opções:

se estás em Win32, podes usar o PyHook. Na Sub-Secção de Armazém de Código de Python podes ver como funciona.

Se estás em Lin, podes usar o pygame, com o keyboard ou coisa assim. Já tentei usar este último e não funcionou, mas pronto, podes ser que contigo funcione.

Posted

Estou a fazer um webcrawler, e queria associar umas quantas teclas a algumas funções. Isto vai ter que funcionar tanto em windows como em gnu/linux... vou continuar a "googlar" 😉

Obrigado pela (tentativa) ajuda

Posted

Para linux podes fazer assim: "tou a citar fonte externa"

import sys, tty, termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
tty.setraw(sys.stdin.fileno())
ch = sys.stdin.read(1)

Para windows é ainda mais fácil....

import msvcrt
ch = msvcrt.getch()

Espero que seja isto que estavas a procura!

RHCE - 120-062-534

Posted

Também podes usar o ncurses para isso, mas se calhar é melhor usar a ideia do newbeen, porque parece que não é necessário andar a instalar módulos extra (basta ter um if/elif com o os.name)

Não me responsabilizo por qualquer dano ocorrido no seguimento dos meus conselhos. Prontos, a minha pessoa está oficialmente protegida legalmente 😄

Posted

O meu problema é o seguinte:

a = 1

while(a):

      print "Qualquer cena"

cada iteração do ciclo while demora muito tempo, por isso não posso fazer uma cena do género

a = 1

while(a):

      print "Qualquer cena"

      if tecla_pressionada == 'p':

         a = 0

quero fazer algo do género

self.a = 1

while(self.a):

      print "Qualquer cena"

   

def tecla_pressionada_handler():

      self.a = 0

singla( tecla_pressionada_handler)

Não sei se me fiz entender, mas este fim de semana devo ter uma solução e perco um bocado de tempo  a expor aqui o problema e a solução. Obrigado pela ajuda. Cumps

Posted

Bem, já resolvi o meu problema. A solução, é que não existe solução, pelo menos uma simples. Ou seja, não existe uma maneira simples de eu pressionar uma determinada tecla e executar uma determinada função associada a essa tecla. Resolvi o meu problema da seguinte maneira.

Eu tenho um programa que está a executar um ciclo while algo extenso e o meu objectivo é executar uma função sempre que eu der ordem para tal, a partir da linha de comandos.

Exemplo:

import signal


def _handler_SIGUSR1(signum, frame):
print "recebi sinal"

signal.signal(signal.SIGUSR1, _handler_SIGUSR1)

while (True):
     pass

como é que eu executo a função _handler_SIGUSR1? É simples, através da linha de comandos, faço um kill -USR1 "pid" e já está. 🙂

Alguma duvida perguntem 😉. Cumps

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.