gocho Posted July 28, 2008 at 09:55 PM Report #201699 Posted July 28, 2008 at 09:55 PM 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
Tharis Posted July 28, 2008 at 10:18 PM Report #201702 Posted July 28, 2008 at 10:18 PM 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.
gocho Posted July 28, 2008 at 10:27 PM Author Report #201705 Posted July 28, 2008 at 10:27 PM 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
newbeen Posted July 29, 2008 at 09:09 AM Report #201730 Posted July 29, 2008 at 09:09 AM 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
rolando2424 Posted July 30, 2008 at 12:11 AM Report #201877 Posted July 30, 2008 at 12:11 AM 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 😄
gocho Posted July 30, 2008 at 02:47 PM Author Report #201944 Posted July 30, 2008 at 02:47 PM 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
gocho Posted August 3, 2008 at 03:58 PM Author Report #202723 Posted August 3, 2008 at 03:58 PM 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
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now