我希望捕获单个用户按键而不用"输入",然后看看它是否是' r'或者' b'等,但特别是在Eclipse中使用PyDev(Windows 7:64bit,Python 3.6.1)。当然Python read a single character from the user中提到了很多不错的选择。 mrvcrt似乎在cmd.exe中工作,但在PyDev中不起作用:
(363+174)/N
为什么不呢?我看到@MatthieuRiegler已经在Using msvcrt.getch() in Eclipse / PyDev问了这个......但是我对任何有效的东西持开放态度,不一定是mrvcrt。谢谢!
答案 0 :(得分:1)
问题是PyDev/Eclipse
没有给你一个真正的终端(你的程序是在没有'真正的'控制台的情况下启动的,它只是重定向输出。)
因此,另一种方法是检查您是否在这种情况下:
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键,则无法获得该输出)。
请注意,拥有一个“真正的”终端是可能的,虽然它需要在Eclipse内部进行一些终端仿真 - 例如https://marketplace.eclipse.org/content/tcf-terminals - 然后PyDev可以在这样的终端中启动程序而不是使用控制台视图...(但这只是在想法世界中,没有截止日期,所以,不幸的是,目前还没有在PyDev / Eclipse中没有输入的情况下获取单个字符。)