小编Sam*_*son的帖子

当.close()失败时,Python 3中的文件描述符会发生什么?

以下Python 3代码在我运行时表现出一些奇怪的行为(至少对我而言)strace:

import os
import sys

if len(sys.argv) != 2:
    print('Usage: ecpy <filename>')
sys.exit(1)
try:
    print('my PID: %d' % os.getpid())
    with open(sys.argv[1], 'w') as fp:
        try:
            fp.write('Hello Stack Overflow!')
        except IOError as e:
            print('### before close')
            print(str(e))
            sys.stdout.flush()
except IOError as e:
    print('### after close')
    print(str(e))
    sys.stdout.flush()

print('### after exception block')
sys.stdout.flush()
Run Code Online (Sandbox Code Playgroud)

由于I/O是缓冲的,如果运行此代码/dev/full,则fpwith块结束时关闭之前不会失败.这并不奇怪.在Python 2.7.3rc2(在我的系统上),代码在实际关闭对应于的文件描述符后运行异常处理程序fp:

write(3, "Hello Stack Overflow!", 21)   = -1 ENOSPC (No space left on device)
close(3)                                = 0 …
Run Code Online (Sandbox Code Playgroud)

python io resource-leak python-3.x

5
推荐指数
1
解决办法
395
查看次数

标签 统计

io ×1

python ×1

python-3.x ×1

resource-leak ×1