加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

急切地从stdin Python返回行

发布时间:2020-12-20 11:47:48 所属栏目:Python 来源:网络整理
导读:我正在创建一个脚本,其中包含一些其他脚本输出管道.另一个脚本需要一段时间才能完成,并将进度与我要解析的数据一起打印到控制台上. 由于我将结果传递给我的脚本,我希望能够做两件事.随着我的输入,我想在屏幕上回应它.命令完成后,我想要一个通过stdin传递的行
我正在创建一个脚本,其中包含一些其他脚本输出管道.另一个脚本需要一段时间才能完成,并将进度与我要解析的数据一起打印到控制台上.

由于我将结果传递给我的脚本,我希望能够做两件事.随着我的输入,我想在屏幕上回应它.命令完成后,我想要一个通过stdin传递的行列表.

我的第一个是使用简单的

for line in sys.stdin:
     sys.stdout.write(line + 'n')
     lines.append(line)
     sys.stdout.flush()

但令我惊讶的是,命令等待直到stdin命中EOF,直到它开始产生线条.

我目前的解决方法是:

line = sys.stdin.readline()
lines = []
while line:
    sys.stdout.write(line.strip() + 'n')
    lines.append(line.strip())
    sys.stdout.flush()
    line = sys.stdin.readline()

但是这并不总是等到使用整个输入.

有没有其他方法可以做到这一点? for解决方案的行为方式似乎很奇怪.

解决方法

Python使用缓冲输入.如果你查看python –help,你会看到:

-u     : unbuffered binary stdout and stderr; also PYTHONUNBUFFERED=x

因此,尝试使用以下内容的无缓冲选项:

command | python -u your_script.py

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读