H
hlubenow
Hello,
I'd like to check, if a single key is pressed on a Linux xterm.
This code waits for a key to be pressed and returns the character:
--------------------------------------------
#!/usr/bin/env python
import sys
import tty
import termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
def getOneKey():
try:
tty.setcbreak(sys.stdin.fileno())
ch = sys.stdin.read(1)
return ord(ch)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
while True:
a = chr(getOneKey())
print a
--------------------------------------------
My problem is, I don't want my program to wait for the keypress.
I just want to check, if a key is currently pressed and if not, I'd like to
continue with my program (like "INKEY$" in some BASIC-dialects).
I tried several things:
- event-handling from pygame: But that would open a pygame-window, I don't
need.
- same thing for window-managers like Tkinter.
- threads: I couldn't do it (especially return values from thread-functions
to the main-program).
- curses: "nodelay()" or "halfdelay()" sound interesting. Maybe; but don't
know how right now. I even wouldn't be able to "print" then ...
- python-Xlib: Too complicated for me too right now; perhaps, if
documentation becomes more complete.
Does anybody know a code example (for Linux xterm) that does it ?
TIA
H.
I'd like to check, if a single key is pressed on a Linux xterm.
This code waits for a key to be pressed and returns the character:
--------------------------------------------
#!/usr/bin/env python
import sys
import tty
import termios
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
def getOneKey():
try:
tty.setcbreak(sys.stdin.fileno())
ch = sys.stdin.read(1)
return ord(ch)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
while True:
a = chr(getOneKey())
print a
--------------------------------------------
My problem is, I don't want my program to wait for the keypress.
I just want to check, if a key is currently pressed and if not, I'd like to
continue with my program (like "INKEY$" in some BASIC-dialects).
I tried several things:
- event-handling from pygame: But that would open a pygame-window, I don't
need.
- same thing for window-managers like Tkinter.
- threads: I couldn't do it (especially return values from thread-functions
to the main-program).
- curses: "nodelay()" or "halfdelay()" sound interesting. Maybe; but don't
know how right now. I even wouldn't be able to "print" then ...
- python-Xlib: Too complicated for me too right now; perhaps, if
documentation becomes more complete.
Does anybody know a code example (for Linux xterm) that does it ?
TIA
H.