在Python中进行刷新时如何防止BrokenPipeError?

2024-01-01

问: 有没有办法使用flush=True为了print()函数没有得到BrokenPipeError https://docs.python.org/3/library/exceptions.html#BrokenPipeError?

我有一个脚本pipe.py:

for i in range(4000):
    print(i)

我在 Unix 命令行中这样称呼它:

python3 pipe.py | head -n3000

它返回:

0
1
2

这个脚本也是如此:

import sys
for i in range(4000):
    print(i)
    sys.stdout.flush()

但是,当我运行这个脚本并将其通过管道传输到head -n3000:

for i in range(4000):
    print(i, flush=True)

然后我得到这个错误:

    print(i, flush=True)
BrokenPipeError: [Errno 32] Broken pipe
Exception BrokenPipeError: BrokenPipeError(32, 'Broken pipe') in <_io.TextIOWrapper name='<stdout>' mode='w' encoding='UTF-8'> ignored

我也尝试过下面的解决方案,但我仍然得到BrokenPipeError:

import sys
for i in range(4000):
    try:
        print(i, flush=True)
    except BrokenPipeError:
        sys.exit()

The BrokenPipeError正如幻象所说,这是正常的,因为读取进程(head)终止并关闭其管道末端,而写入进程(python)仍然尝试写入。

Is is异常情况,并且 python 脚本收到BrokenPipeError- 更准确地说,Python 解释器收到一个系统 SIGPIPE 信号,它捕获并引发BrokenPipeError允许脚本处理错误。

并且您可以有效地处理错误,因为在上一个示例中,您只看到一条消息,指出异常已被忽略 - 好吧,这不是真的,但似乎与此相关开放问题 http://bugs.python.org/issue11380,#msg153320in Python :Python 开发人员认为警告用户异常情况很重要。

真正发生的是,据我所知,Python 解释器总是在 stderr 上发出信号,即使你捕获了异常。但是您只需在退出之前关闭 stderr 即可删除该消息。

我将你的脚本稍微更改为:

  • 正如您在上一个示例中所做的那样捕获错误
  • 捕获 IOError(我在 Windows 64 上的 Python34 中遇到的)或 Broken Pipe Error(在 FreeBSD 9.0 上的 Python 33 中遇到的) - 并显示一条消息
  • 显示自定义Donestderr 上的消息(由于管道损坏,stdout 已关闭)
  • 关闭标准错误在退出之前删除该消息

这是我使用的脚本:

import sys

try:
    for i in range(4000):
            print(i, flush=True)
except (BrokenPipeError, IOError):
    print ('BrokenPipeError caught', file = sys.stderr)

print ('Done', file=sys.stderr)
sys.stderr.close()

这里的结果是python3.3 pipe.py | head -10 :

0
1
2
3
4
5
6
7
8
9
BrokenPipeError caught
Done

如果您不想要无关的消息,只需使用:

import sys

try:
    for i in range(4000):
            print(i, flush=True)
except (BrokenPipeError, IOError):
    pass

sys.stderr.close()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Python中进行刷新时如何防止BrokenPipeError? 的相关文章

  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • 在 Celery 任务中调用 Google Cloud API 永远不会返回

    我正在尝试拨打外部电话Google Cloud Natural Language API从一个内Celery任务 使用google cloud python包裹 问题是对 API 的调用永远不会返回 挂起 celery task def g
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • Django Rest Framework 是否有第三方应用程序来自动生成 swagger.yaml 文件?

    我有大量的 API 端点编写在django rest framework并且不断增加和更新 如何创建和维护最新的 API 文档 我当前的版本是 Create swagger yaml文件并以某种方式在每次端点更改时自动生成 然后使用此文件作
  • 如何从Python中的函数返回多个值? [复制]

    这个问题在这里已经有答案了 如何从Python中的函数返回多个变量 您可以用逗号分隔要返回的值 def get name you code return first name last name 逗号表示它是一个元组 因此您可以用括号将值括
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • Tensorboard SyntaxError:语法无效

    当我尝试制作张量板时 出现语法错误 尽管开源代码我还是无法理解 我尝试搜索张量板的代码 但不清楚 即使我不擅长Python 我这样写路径C Users jh902 Documents logs因为我正在使用 Windows 10 但我不确定
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 使用 python/numpy 重塑数组

    我想重塑以下数组 gt gt gt test array 11 12 13 14 21 22 23 24 31 32 33 34 41 42 43 44 为了得到 gt gt gt test2 array 11 12 21 22 13 14
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • pandas - 包含时间序列数据的堆积条形图

    我正在尝试使用时间序列数据在 pandas 中创建堆积条形图 DATE TYPE VOL 0 2010 01 01 Heavy 932 612903 1 2010 01 01 Light 370 612903 2 2010 01 01 Me
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • 将 Matlab 的 datenum 格式转换为 Python

    我刚刚开始从 Matlab 迁移到 Python 2 7 在读取 mat 文件时遇到一些问题 时间信息以 Matlab 的日期数字格式存储 对于那些不熟悉它的人 日期序列号将日历日期表示为自固定基准日期以来已经过去的天数 在 MATLAB
  • 在 Google App Engine 中,如何避免创建具有相同属性的重复实体?

    我正在尝试添加一个事务 以避免创建具有相同属性的两个实体 在我的应用程序中 每次看到新的 Google 用户登录时 我都会创建一个新的播放器 当新的 Google 用户在几毫秒内进行多个 json 调用时 我当前的实现偶尔会创建重复的播放器
  • Python:Goslate 翻译请求返回“503:服务不可用”[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我们不允许提出寻求书籍 工具 软件库等推荐的问题 您可以编辑问题 以便用事实和引文来回答 这个问题似乎不是关于主要由程序员使用的特定编程问
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • 将 hibernate 添加到 netbeans 中的现有 Web 应用程序中?

    我在 netbeans 中创建了一个 Web 应用程序 它运行良好 现在出于学习目的 我想使用 hibernate 进行数据库交互 我可以在 netbeans 中使用 hibernate 创建一个新项目 但我不知道如何在现有项目中添加 hi
  • Javascript getImageData for canvas html5

    我已经把头发扯下来了 我得到了这个工作 认为 我可以承担不保存这个版本的费用 然后我 打破了 构建 线路myImageData context getImageData 0 0 canvas width canvas height 似乎打破
  • PHP进程间通信监控消息队列

    我正在开发一个项目 为排行榜和其他几个位置生成统计数据 我的目标是尽可能实时 因此我实现了一个用于消息队列的 RabbitMQ 服务器 在前端 我有一个 Nodejs 设置 用于将信息提供给正在观看它的客户 在同一台服务器上 我有一个 PH
  • InvalidOperationException:内容类型不正确:ASP.NET Core

    我有两种表格 一种用于登录 一种用于注册 它们都在同一视图上并使用同一模型 我正在使用控制器处理表单提交 我在访问登录页面时收到以下错误 InvalidOperationException Incorrect Content Type 完整
  • Custom.css 在 32.0.1700.76 m Google Chrome 更新中停止工作

    我使用此网站上的 Google 开发者工具的一些主题 http devthemez com themes chrome developer tools http devthemez com themes chrome developer t
  • 如何将元素数组转换为 NodeList?

    首先第一件事是 这不是问如何将 NodeList 转换为数组 这是相反的 为了保持一致性 我想创建一个返回 NodeList 的函数 就像document querySelectorAll does 这是我当前的代码 var toNodeL
  • 如何使用reason-react有条件地在JSX中设置HTML属性?

    我想渲染一个 HTML 复选框 其选中状态由数据控制 给出一个接收一个无状态组件item type label string checked bool Like so let component ReasonReact statelessC
  • 删除 MySQL 表中的重复条目[重复]

    这个问题在这里已经有答案了 我有一个有几千行的表 该表包含两列 name and email 我有几个重复的行 例如 约翰 史密斯 电子邮件受保护 cdn cgi l email protection 约翰 史密斯 电子邮件受保护 cdn
  • 有没有办法影响 AlchemyAPI 情感分析

    我使用 AlchemyAPI 进行文本分析 我想知道是否有办法影响 API 结果或根据要求对其进行微调 我试图分析互联网上可用的不同呼叫中心对话 了解情绪 即客户是否不满意 生气 因此对话是否消极 对于十分之九的对话 它给出的情绪是积极的
  • 无法解析:com.google.code.gson:gson.2.2.2

    我将项目从 eclipse 导入到 android studio 并在将项目与 gradle 文件同步后收到上述消息 我是 android studio 的新手 不知道如何解决这个错误 以下是 Gradle 文件 apply plugin
  • Bitbucket 上的 Git:始终要求输入密码,即使在上传我的公共 SSH 密钥后也是如此

    我上传了我的 ssh id rsa pub to Bitbucket 的 SSH 密钥 https bitbucket org account ssh keys as 解释了 https confluence atlassian com b
  • Windows Phone 8.1 设备 (Lumia 930) 和 VS2013 调试仅适用于禁用 WiFi

    当 Windows Phone 8 1 应用程序启动进行部署和调试时 VS2013 中出现错误 错误 1 错误 DEP6100 发生以下意外错误 在 boostrapping 阶段 连接到设备 SmartDeviceException 部署
  • Flutter 自动完成功能在 VSCode 中不适用于包

    我将整个 flutter 项目移动到一个新文件夹 一切运行正常 自动完成功能适用于 flutter 中的构建文件 例如 Container Column 但是当我尝试使用包 例如提供者 时 我需要进入 pub dev 页面并复制导入 手动导
  • word2vec - 什么是最好的?添加、连接或平均词向量?

    我正在研究循环语言模型 为了学习可用于初始化语言模型的词嵌入 我使用 gensim 的 word2vec 模型 训练后 word2vec 模型为词汇表中的每个单词保存两个向量 单词嵌入 输入 隐藏矩阵的行 和上下文嵌入 隐藏 输出矩阵的列
  • Hadoop集群节点数

    我正在尝试设置 Hadoop 多节点集群 当我启动集群时 这是我在控制台中的响应 hduser hadoop master usr local hadoop usr local hadoop sbin start dfs sh Starti
  • Base64 图像上传到 S3 时损坏

    router post image multipartMiddleware function req res var file name req body name var data req body data return s3fsImp
  • 如何验证空手道 BDD 响应中收到的日期

    我的响应中有两个字段 响应中有两个参数 日期1 2018年12月18日 日期2 2018年11月23日 我想测试 id date1 是否小于今天的日期 并且 date2 小于请求参数中的某个其他日期 我不知道如何在空手道模式验证中执行此操作
  • 浮动操作按钮阻止其他组件

    谷歌的新材料设计建议使用浮动操作按钮来吸引用户注意屏幕上的主要操作 列表视图中有很多这样的例子 现在 假设您的列表视图有足够的项目来填满屏幕 从而无法滚动 如果您的列表项具有用户可以与之交互的某个组件 例如开关或最喜欢的星星 则浮动操作按钮
  • 如何将大型 JSON 文件分割成块并使用 GSON 进行排序

    我有一个巨大的 JSON 文件 名为 Something json 文件大小为 20 MB 我正在用 GSON 读这篇文章 它可以在标准 Android Nexus 5X 上读取 Json 示例 country UA name Hurzuf
  • 在Python中进行刷新时如何防止BrokenPipeError?

    问 有没有办法使用flush True为了print 函数没有得到BrokenPipeError https docs python org 3 library exceptions html BrokenPipeError 我有一个脚本p