python中的sys stdin_Python等待数据进入sys.stdin

下面的方法应该行得通。import sys

for line in sys.stdin:

# whatever

理由:

代码将在stdin中的行上迭代。如果流仍处于打开状态,但没有完整的行,则循环将挂起,直到遇到换行符(并返回整行)或流关闭(并返回缓冲区中剩余的内容)。

一旦流关闭,就不能再向stdin写入或从stdin读取数据。周期。

代码导致cpu过载的原因是,一旦stdin被关闭,任何后续的遍历stdin的尝试都将立即返回,而不做任何操作。实际上,您的代码相当于以下代码。for line in sys.stdin:

# do something

while 1:

pass # infinite loop, very CPU intensive

如果你把你如何向stdin写入数据的方式公布出来,也许会有帮助。

编辑:

Python将(出于for循环的目的,迭代器和readlines()考虑在遇到EOF字符时关闭流。在此之后,您可以要求python读取更多数据,但不能使用前面的任何方法。python手册页建议使用import sys

while True:

line = sys.stdin.readline()

# do something with line

遇到EOF字符时,readline将返回空字符串。如果流仍处于打开状态,则对readline的下一个调用将正常工作。您可以通过在终端中运行命令来测试这一点。按ctrl+D将导致终端将EOF字符写入stdin。这将导致本文中的第一个程序终止,但最后一个程序将继续读取数据,直到流实际关闭。最后一个程序不应该是100%的CPU,因为readline会等到有数据返回,而不是返回空字符串。

我只有在尝试从实际文件中读取行时才遇到忙循环的问题。但当从stdin读取时,readline会愉快地阻塞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值