• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

gocho

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

7 mensagens neste tópico

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora