gpt4 book ai didi

python - Python 中奇怪的 select.select() 行为

转载 作者:太空宇宙 更新时间:2023-11-03 14:51:52 24 4
gpt4 key购买 nike

我正在尝试使用 Python 脚本逐个字符地从标准输入读取数据,并使用 select.select() 在有可用信息时收到通知。我面临着一种我无法理解的行为;最好用一个例子来说明。首先,这是一个示例选择代码:

import select
import sys

while True:
r, w, e = select.select([sys.stdin], [], [])
print "Read: %s" % sys.stdin.read(1)

现在这是脚本的示例运行:

/tmp$ python test.py 
AAAA # I type in a few chars then ENTER.
Read: A # Only one char is detected :(
BBBB # I type in more characters
Read: A # Now all the previous characters are detected!?
Read: A
Read: A
Read: # ('\n' is read which I want)

Read: B # Wait, where are the other Bs?
CCCC # I need to type more chars so that BBB is printed, and the first C.

如上所示,如果在 stdin 中键入多个字符,则仅打印第一个字符。然后,如果添加更多字符,则打印先前输入的所有剩余字符以及新输入的第一个字符。

我做错了什么?

最佳答案

select.select 不知道 Python 文件对象(例如 sys.stdin)中的缓冲。您可以完全绕过文件对象,尽管这会与从 sys.stdin 读取的尝试产生奇怪的交互:

import select
import os
import sys

while True:
r, w, e = select.select([sys.stdin], [], [])
print os.read(sys.stdin.fileno(), 1)

关于python - Python 中奇怪的 select.select() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45846517/

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