我在python中制作秒表类型程序,我想知道如何检测是否按下了一个键(例如p表示暂停,s表示停止),我不希望它像raw_input那样等待用户在继续执行之前的输入.任何人都知道如何在while循环中执行此操作?
另外,我想制作这个跨平台,但如果不可能,那么我的主要开发目标是linux
你会如何提示用户输入一些信息但是在N秒后超时?
谷歌在http://mail.python.org/pipermail/python-list/2006-January/533215.html上指向了一个关于它的邮件线程,但似乎没有用.超时发生的语句,无论是sys.input.readline还是timer.sleep(),我总是得到:
<type'exception.TypeError'>:[raw_]输入最多需要1个参数,得2
以某种方式,除了没有抓住.
有没有办法在python中做一些关键的监听器而没有一个巨大的膨胀模块,比如pygame?
一个例子是,当我按下a键时,它会打印到控制台
一键被按下了!
它还应该监听箭头键/空格键/ shift键.
我试图在Windows 7 64位和Python 3.4.3上异步读取stdin
我尝试了这个受到SO回答的启发:
import asyncio
import sys
def reader():
print('Received:', sys.stdin.readline())
loop = asyncio.get_event_loop()
task = loop.add_reader(sys.stdin.fileno(), reader)
loop.run_forever()
loop.close()
Run Code Online (Sandbox Code Playgroud)
然而,它提出了一个OSError: [WInError 100381] An operation was attempted on something that is not a socket.
类似文件的对象是否stdin可以包含在类中以赋予它套接字的API?我已单独提出这个问题,但如果解决方案很简单,请在此处回答.
假设我无法包装类似文件的对象使其成为套接字,我尝试使用流作为这个要点的启发:
import asyncio
import sys
@asyncio.coroutine
def stdio(loop):
reader = asyncio.StreamReader(loop=loop)
reader_protocol = asyncio.StreamReaderProtocol(reader)
yield from loop.connect_read_pipe(lambda: reader_protocol, sys.stdin)
@asyncio.coroutine
def async_input(loop):
reader = yield from stdio(loop)
line = yield from reader.readline()
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个并发的Python程序,asyncio它也接受键盘输入。当我尝试关闭程序时出现问题。由于键盘输入最终是通过 完成的sys.stdin.readline,因此该函数仅在我按下 后返回ENTER,无论我是stop()事件循环还是cancel()函数的Future。
有什么办法可以提供asyncio可以取消的键盘输入吗?
这是我的 MWE。它将接受键盘输入 1 秒,然后stop():
import asyncio
import sys
async def console_input_loop():
while True:
inp = await loop.run_in_executor(None, sys.stdin.readline)
print(f"[{inp.strip()}]")
async def sleeper():
await asyncio.sleep(1)
print("stop")
loop.stop()
loop = asyncio.get_event_loop()
loop.create_task(console_input_loop())
loop.create_task(sleeper())
loop.run_forever()
Run Code Online (Sandbox Code Playgroud) python ×5
asynchronous ×1
detect ×1
keylistener ×1
keypress ×1
python-2.7 ×1
python-3.x ×1
stdin ×1
timeout ×1
windows ×1