当stdin非交互时如何清除python中的stdin缓冲区

早产

如何从python中的stdin缓冲区读取所有内容而不会阻塞?我没有发现任何堆栈溢出解决方案,因为我的stdin是非交互式的。

我试过了:

tcflush

tcflush(sys.stdin, TCIOFLUSH) 在非交互式标准输入上不起作用。

选择

while select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
  sys.stdin.read(1)

while len(select.select([sys.stdin.fileno()], [], [], 0.0)[0])>0:
  os.read(sys.stdin.fileno(), 4096)

哪个不起作用,因为while头部的状态始终是False

还有其他想法吗?

编辑

更准确地说:

我的代码应该

  • 如果输入缓冲区为空,则不执行任何操作
  • 如果其中有东西,则清空缓冲区

因此,它永远不会阻塞。

早产

到目前为止,感谢您的建议。毕竟,这显然是那些奇怪的并发问题之一。

当我在select通话中设置超时时,它可以工作。因此,在我调用时,缓冲区似乎真的还没有被填充select

不起作用(与问题相同):

while select.select([sys.stdin], [], [], 0) == ([sys.stdin], [], []):
  sys.stdin.read(1)

起作用:

while select.select([sys.stdin], [], [], 0.01) == ([sys.stdin], [], []):
  sys.stdin.read(1)

因为我要读取的内容是基于行的,所以我可以一次使用读取整行,input而不是read使用while读取单个字符,因此while循环中的超时减慢不会引起注意。(缓冲区中最多有5-10行)。

我对这种解决方案并不完全满意,因为它涉及等待任意时间(0.01总是足够吗?)。但另一方面,由于无法影响编写到“我的stdin”的代码,我现在无法想到更好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使Emacs在启动时从stdin读取缓冲区?

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

Python中的Memset(),清除缓冲区

来自分类Dev

C-当stdin的缓冲区中已经有数据时,在stdin上执行select()

来自分类Dev

如何将当前缓冲区或行作为stdin发送到vim中的system()?

来自分类Dev

为什么使用EOF检查是否清除了stdin缓冲区

来自分类Dev

在金属中如何清除深度缓冲区或模板缓冲区?

来自分类Dev

如何从bash清除konsole中的回滚缓冲区?

来自分类Dev

读取c中的输入后如何清除缓冲区?

来自分类Dev

如何在Python中清除stdin

来自分类Dev

如何清除ReplaySubject上的缓冲区?

来自分类Dev

如何清除Neovim缓冲区

来自分类Dev

Python:清除标准输入缓冲区

来自分类Dev

强制在scanf中清除缓冲区

来自分类Dev

如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

来自分类Dev

在连续调用期间,STDIN缓冲区和getchar()指针如何变化?

来自分类Dev

在连续调用期间,STDIN缓冲区和getchar()指针如何变化?

来自分类Dev

从另一个TTY会话的STDIN流缓冲区中删除数据

来自分类Dev

检查stdin缓冲区是否为空

来自分类Dev

Java中的非阻塞缓冲区

来自分类Dev

清除键盘缓冲区

来自分类Dev

有哪些方法可以将stdout捕获到读取时自动清除的缓冲区中?

来自分类Dev

如何在Python中合并多个缓冲区对象?

来自分类Dev

Emacs lisp,如何“交互式”读取缓冲区?

来自分类Dev

如何重新映射清除缓冲区以删除Iterm2中的所有行?

来自分类Dev

如何以编程方式清除Windows中的缓冲区和缓存

来自分类Dev

如何清除套接字缓冲区以从最新请求中获取最新数据

来自分类Dev

在C中的fgets()之后清除输入缓冲区

来自分类Dev

在OpenGL中清除双精度缓冲区

Related 相关文章

  1. 1

    如何使Emacs在启动时从stdin读取缓冲区?

  2. 2

    Python中的Memset(),清除缓冲区

  3. 3

    Python中的Memset(),清除缓冲区

  4. 4

    C-当stdin的缓冲区中已经有数据时,在stdin上执行select()

  5. 5

    如何将当前缓冲区或行作为stdin发送到vim中的system()?

  6. 6

    为什么使用EOF检查是否清除了stdin缓冲区

  7. 7

    在金属中如何清除深度缓冲区或模板缓冲区?

  8. 8

    如何从bash清除konsole中的回滚缓冲区?

  9. 9

    读取c中的输入后如何清除缓冲区?

  10. 10

    如何在Python中清除stdin

  11. 11

    如何清除ReplaySubject上的缓冲区?

  12. 12

    如何清除Neovim缓冲区

  13. 13

    Python:清除标准输入缓冲区

  14. 14

    强制在scanf中清除缓冲区

  15. 15

    如何在到达缓冲区而不是缓冲区已满时读取缓冲区中的数据?

  16. 16

    在连续调用期间,STDIN缓冲区和getchar()指针如何变化?

  17. 17

    在连续调用期间,STDIN缓冲区和getchar()指针如何变化?

  18. 18

    从另一个TTY会话的STDIN流缓冲区中删除数据

  19. 19

    检查stdin缓冲区是否为空

  20. 20

    Java中的非阻塞缓冲区

  21. 21

    清除键盘缓冲区

  22. 22

    有哪些方法可以将stdout捕获到读取时自动清除的缓冲区中?

  23. 23

    如何在Python中合并多个缓冲区对象?

  24. 24

    Emacs lisp,如何“交互式”读取缓冲区?

  25. 25

    如何重新映射清除缓冲区以删除Iterm2中的所有行?

  26. 26

    如何以编程方式清除Windows中的缓冲区和缓存

  27. 27

    如何清除套接字缓冲区以从最新请求中获取最新数据

  28. 28

    在C中的fgets()之后清除输入缓冲区

  29. 29

    在OpenGL中清除双精度缓冲区

热门标签

归档