gpt4 book ai didi

python - 打印大量格式化数据时如何避免 Broken Pipe 错误?

转载 作者:太空狗 更新时间:2023-10-29 20:46:01 31 4
gpt4 key购买 nike

我正在尝试打印在我的 stdout 中格式化的元组列表。为此,我使用 str.format方法。一切正常,但是当我通过管道输出以查看使用 head 命令的第一行发生了 IOError

这是我的代码:

# creating the data
data = []$
for i in range(0, 1000):
pid = 'pid%d' % i
uid = 'uid%d' % i
pname = 'pname%d' % i
data.append( (pid, uid, pname) )

# find max leghed string for each field
pids, uids, pnames = zip(*data)
max_pid = len("%s" % max( pids) )
max_uid = len("%s" % max( uids) )
max_pname = len("%s" % max( pnames) )

# my template for the formatted strings
template = "{0:%d}\t{1:%d}\t{2:%d}" % (max_pid, max_uid, max_pname)

# print the formatted output to stdout
for pid, uid, pname in data:
print template.format(pid, uid, pname)

这是运行命令后出现的错误:python myscript.py |头

Traceback (most recent call last):
File "lala.py", line 16, in <module>
print template.format(pid, uid, pname)
IOError: [Errno 32] Broken pipe

谁能帮我解决这个问题?

我试图将 print 放在 try-except block 中来处理错误,但在那之后控制台中出现了另一条消息:

close failed in file object destructor:
sys.excepthook is missing
lost sys.stderr

我还尝试通过连续两次立即刷新数据sys.stdout.writesys.stdout.flush 调用,但没有任何反应..

最佳答案

headstdout 读取然后关闭它。这会导致 print 失败,它会在内部写入 sys.stdout,现在已关闭。

您可以简单地捕获 IOError 并静默退出:

try:
for pid, uid, pname in data:
print template.format(pid, uid, pname)
except IOError:
# stdout is closed, no point in continuing
# Attempt to close them explicitly to prevent cleanup problems:
try:
sys.stdout.close()
except IOError:
pass
try:
sys.stderr.close()
except IOError:
pass

关于python - 打印大量格式化数据时如何避免 Broken Pipe 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15793886/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com