问题:有没有办法在不获取 flush=True
的情况下将print()
用于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()
参考方案
BrokenPipeError
是正常的,因为读取过程(头)终止并关闭管道的末端,而写入过程(python)仍尝试写入。
如果是是异常情况,并且python脚本接收到BrokenPipeError
-更准确地说,Python解释程序会接收到系统SIGPIPE信号,该信号会捕获并引发BrokenPipeError
以允许脚本处理错误。
而且您可以有效地处理该错误,因为在上一个示例中,您仅看到一条消息,指出忽略了该异常-好的,它不是真的,但似乎与Python中的此open issue有关:Python开发人员认为警告用户警告很重要。异常情况。
真正发生的是,即使您捕获到异常,Python解释器AFAIK始终会在stderr上发出信号。但是您只需要在退出前关闭stderr即可消除该消息。
我将您的脚本略微更改为:
一样捕获错误
的消息
之前关闭stderr
这是我使用的脚本:
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()
在返回'Response'(Python)中传递多个参数 - python我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…
Python exchangelib在子文件夹中读取邮件 - python我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…
Python GPU资源利用 - python我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…
R'relaimpo'软件包的Python端口 - python我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。
Python:图像处理可产生皱纹纸效果 - python也许很难描述我的问题。我正在寻找Python中的算法,以在带有某些文本的白色图像上创建皱纹纸效果。我的第一个尝试是在带有文字的图像上添加一些真实的皱纹纸图像(具有透明度)。看起来不错,但副作用是文本没有真正起皱。所以我正在寻找更好的解决方案,有什么想法吗?谢谢 参考方案 除了使用透明性之外,假设您有两张相同尺寸的图像,一张在皱纹纸上明亮,一张在白色背景上有深…