gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:48:18 26 4
gpt4 key购买 nike

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

知道该怎么做吗?

最佳答案

也许使用 sys.stdin.read什么时候在 PyDev 中运行?喜欢 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 - 在 Eclipse/PyDev 中使用 msvcrt.getch(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076853/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com