Pydev / Eclipse 中的单字符输入
Single character input in Pydev / Eclipse
我想在没有 "enter" 的情况下捕获单个用户按键,然后查看它是 'r' 还是 'b' 等,但特别是在带有 PyDev 的 Eclipse 中(Windows 7:64 位,Python 3.6.1)。当然,Python read a single character from the user 中提到了许多不错的选择。 mrvcrt 似乎在 cmd.exe 中有效,但在 PyDev 中无效:
import msvcrt
mych = msvcrt.getwch()
print('You pressed: ' + mych)
为什么不呢?我看到@MatthieuRiegler 已经在 Using msvcrt.getch() in Eclipse / PyDev 上问过这个问题……但我对任何有效的方法都持开放态度,不一定是 mrvcrt。谢谢!
问题是 PyDev/Eclipse
没有给你一个真正的终端(你的程序在没有 'real' 控制台的情况下启动,它只是重定向输出)。
因此,另一种方法是检查您是否处于这种情况:
import sys
is_in_terminal = sys.stdin.isatty()
if not is_in_terminal:
entered = input() # input() on Py3, on Py2 it'd be raw_input()
else:
import msvcrt
entered = msvcrt.getwch()
唯一的问题是,如果它不在终端中,则内容只能在新行上供程序使用(因此,如果他不按 enter 键,就不可能获得该输出)。
请注意,拥有一个 'real' 终端是可能的,尽管它需要在 Eclipse 中进行一些终端仿真——例如 https://marketplace.eclipse.org/content/tcf-terminals——然后 PyDev 可以在这样的终端中启动一个程序终端而不是使用控制台视图...(但这只是在创意世界中,没有截止日期,所以,不幸的是,目前无法在不输入 PyDev/Eclipse 的情况下获取单个字符) .
我想在没有 "enter" 的情况下捕获单个用户按键,然后查看它是 'r' 还是 'b' 等,但特别是在带有 PyDev 的 Eclipse 中(Windows 7:64 位,Python 3.6.1)。当然,Python read a single character from the user 中提到了许多不错的选择。 mrvcrt 似乎在 cmd.exe 中有效,但在 PyDev 中无效:
import msvcrt
mych = msvcrt.getwch()
print('You pressed: ' + mych)
为什么不呢?我看到@MatthieuRiegler 已经在 Using msvcrt.getch() in Eclipse / PyDev 上问过这个问题……但我对任何有效的方法都持开放态度,不一定是 mrvcrt。谢谢!
问题是 PyDev/Eclipse
没有给你一个真正的终端(你的程序在没有 'real' 控制台的情况下启动,它只是重定向输出)。
因此,另一种方法是检查您是否处于这种情况:
import sys
is_in_terminal = sys.stdin.isatty()
if not is_in_terminal:
entered = input() # input() on Py3, on Py2 it'd be raw_input()
else:
import msvcrt
entered = msvcrt.getwch()
唯一的问题是,如果它不在终端中,则内容只能在新行上供程序使用(因此,如果他不按 enter 键,就不可能获得该输出)。
请注意,拥有一个 'real' 终端是可能的,尽管它需要在 Eclipse 中进行一些终端仿真——例如 https://marketplace.eclipse.org/content/tcf-terminals——然后 PyDev 可以在这样的终端中启动一个程序终端而不是使用控制台视图...(但这只是在创意世界中,没有截止日期,所以,不幸的是,目前无法在不输入 PyDev/Eclipse 的情况下获取单个字符) .