在 Eclipse / PyDev 中使用 msvcrt.getch()

Posted

技术标签:

【中文标题】在 Eclipse / PyDev 中使用 msvcrt.getch()【英文标题】:Using msvcrt.getch() in Eclipse / PyDev 【发布时间】:2013-04-11 04:59:18 【问题描述】:

我想在带有 PyDev 的 Eclipse 中使用 msvcrt.getch() 来读取符号字符,但我发现它不起作用(但它在 Windows 控制台中起作用)。

知道该怎么做吗?

【问题讨论】:

那是不可能的。见:***.com/a/46303939/110451 【参考方案1】:

也许在 PyDev 中运行时使用sys.stdin.read?像sys.stdin.read(1) 从输入中读取 1 行...用于 Windows 控制台和 PyDev 根据操作系统和运行变体进行相同的选择(使用sys.stdin.isatty)。例如下一个代码读取限时用户输入。但是,当在 Windows 控制台中运行时,如果程序的标准输入与另一个程序的标准输出一起通过管道输入,则 sys.stdin.isatty 返回 False 并使用 sys.stdin.read 读取输入,而不是 msvcrt.getch

import sys, time
import platform
if platform.system() == "Windows":
    import msvcrt
else:
    from select import select

def input_with_timeout_sane(prompt, timeout, default):
    """Read an input from the user or timeout"""
    print prompt,
    sys.stdout.flush()
    rlist, _, _ = select([sys.stdin], [], [], timeout)
    if rlist:
        s = sys.stdin.readline().replace('\n','')
    else:
        s = default
        print s
    return s
def input_with_timeout_windows(prompt, timeout, default): 
    start_time = time.time()
    print prompt,
    sys.stdout.flush()
    input = ''
    read_f=msvcrt.getche
    input_check=msvcrt.kbhit
    if not sys.stdin.isatty( ):
        read_f=lambda:sys.stdin.read(1)
        input_check=lambda:True
    while True:
        if input_check():
            chr_or_str = read_f()
            try:
                if ord(chr_or_str) == 13: # enter_key
                    break
                elif ord(chr_or_str) >= 32: #space_char
                    input += chr_or_str
            except:
                input=chr_or_str
                break #read line,not char...        
        if len(input) == 0 and (time.time() - start_time) > timeout:
            break
    if len(input) > 0:
        return input
    else:
        return default

def input_with_timeout(prompt, timeout, default=''):
    if platform.system() == "Windows":
        return input_with_timeout_windows(prompt, timeout, default)
    else:
        return input_with_timeout_sane(prompt, timeout, default)

print "\nAnswer is:"+input_with_timeout("test?",10,"no input entered")

【讨论】:

以上是关于在 Eclipse / PyDev 中使用 msvcrt.getch()的主要内容,如果未能解决你的问题,请参考以下文章

在 Eclipse + Pydev 中使用 WinPython 发行版?

在 Eclipse 中使用 JEP/Pydev 看不到 print 和 println 语句

在 Eclipse 中缩进 python 文件(使用 pydev)

如何在 Eclipse-PyDev 中更改控制台字体大小

在 PyDev Eclipse 项目文件中使用环境变量

MyEclipse10或者eclipse中配置开发Python的Pydev插件安装教程