【问题标题】:Blocking read from stdin in python在python中阻止从标准输入读取
【发布时间】:2017-02-04 22:20:09
【问题描述】:

如何在 python (2.7) 中从标准输入执行阻塞读取操作,暂停进程直到管道中出现一些数据?

read() 的问题在于,在第一次返回后,read() 不再阻塞。示例:

echo 'test test ' | python test.py

# test.py
import sys
while True:
  string = sys.stdin.read() # Blocks only for the first time
  print '!!!!!!!!'

【问题讨论】:

  • pipe 将文本 test test 发送到脚本并关闭连接 - 您希望下一个 read() 阅读什么?
  • 另一个进程(例如父进程)可以写入该进程的标准输入。
  • 对我来说,父进程只能写入echo,不能写入脚本。

标签: python io stdin blocking


【解决方案1】:

f.read() 阻塞,但如果到达 EOF,也会返回一个空字符串。您的示例已损坏,因为输入流已关闭并且已达到 EOF。此外,您很可能想阅读整行,所以readline 是合适的。

【讨论】:

  • Mb 你知道,有没有办法在达到 eof 后修复标准输入?
  • 没有办法。您的问题听起来很像XY Problem,但如果您陈述您的实际问题(在一个新问题中)可能会有所帮助
  • 这个问题有不同的解决方案(例如,使用一些其他的互处理工具),我只是认为我可以用直接的方法快速处理它。最初的问题是语法网络 docker 容器的包装器,不需要在每次输入时都重新启动(启动时间很长)。它可以处理来自标准输入的数据,并且使内部脚本读取其他内容似乎相当复杂。
猜你喜欢
  • 1970-01-01
  • 2015-07-05
  • 2017-10-16
  • 2018-07-26
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多