if 包含 raw_input 的语句只打印我在键盘上输入的任何内容
if statement including raw_input just prints whatever i type in to the keyboard
我对 python 和一般编程还很陌生,我想在键盘上按 "w" 时打印字符串 "forward"。这是一个测试,我将把它变成一个机动车的遥控器。
while True:
if raw_input("") == "w":
print "forward"
为什么它只打印出我键入的每个键?
raw_input
读取整行输入。您正在输入的行对您可见,您可以执行一些操作,例如键入一些文本:
aiplanes
请留下几个字符来更正您的错字:
airplanes
回到最后删除一个字符,因为你不是故意让它变成复数的:
airplane
然后按 Enter,然后 raw_input
将 return "airplane"
。当您按下键盘键时,它不仅会立即 return。
如果您想要读取单个键,您将需要使用较低级别的终端控制例程来获取输入。在 Unix 上,curses
模块是一个合适的工具;我不确定您会在 Windows 上使用什么。我以前没有这样做过,但在 Unix 上,我认为您需要将终端设置为原始或 cbreak 模式,并使用 window.getkey()
或 window.getch()
进行输入。您可能还必须关闭回显 curses.noecho()
;我不确定这是否包含在 raw/cbreak 模式中。
在 Python 2.x 中,raw_input 函数将显示所有按下的字符,并且 return 接收到换行符。如果您想要不同的行为,则必须使用不同的功能。这是 Python 的便携版 getch,它会 return 每次按键:
# Copied from: whosebug.com/questions/510357/python-read-a-single-character-from-the-user
def _find_getch():
try:
import termios
except ImportError:
# Non-POSIX. Return msvcrt's (Windows') getch.
import msvcrt
return msvcrt.getch
# POSIX system. Create and return a getch that manipulates the tty.
import sys, tty
def _getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
return _getch
getch = _find_getch()
可以这样使用:
while True:
if getch() == "w":
print "forward"
我对 python 和一般编程还很陌生,我想在键盘上按 "w" 时打印字符串 "forward"。这是一个测试,我将把它变成一个机动车的遥控器。
while True:
if raw_input("") == "w":
print "forward"
为什么它只打印出我键入的每个键?
raw_input
读取整行输入。您正在输入的行对您可见,您可以执行一些操作,例如键入一些文本:
aiplanes
请留下几个字符来更正您的错字:
airplanes
回到最后删除一个字符,因为你不是故意让它变成复数的:
airplane
然后按 Enter,然后 raw_input
将 return "airplane"
。当您按下键盘键时,它不仅会立即 return。
如果您想要读取单个键,您将需要使用较低级别的终端控制例程来获取输入。在 Unix 上,curses
模块是一个合适的工具;我不确定您会在 Windows 上使用什么。我以前没有这样做过,但在 Unix 上,我认为您需要将终端设置为原始或 cbreak 模式,并使用 window.getkey()
或 window.getch()
进行输入。您可能还必须关闭回显 curses.noecho()
;我不确定这是否包含在 raw/cbreak 模式中。
在 Python 2.x 中,raw_input 函数将显示所有按下的字符,并且 return 接收到换行符。如果您想要不同的行为,则必须使用不同的功能。这是 Python 的便携版 getch,它会 return 每次按键:
# Copied from: whosebug.com/questions/510357/python-read-a-single-character-from-the-user
def _find_getch():
try:
import termios
except ImportError:
# Non-POSIX. Return msvcrt's (Windows') getch.
import msvcrt
return msvcrt.getch
# POSIX system. Create and return a getch that manipulates the tty.
import sys, tty
def _getch():
fd = sys.stdin.fileno()
old_settings = termios.tcgetattr(fd)
try:
tty.setraw(fd)
ch = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
return _getch
getch = _find_getch()
可以这样使用:
while True:
if getch() == "w":
print "forward"