打印与写入期间IOError的可能性

时间:2010-05-04 06:00:33

标签: python exception file-io

我最近在NFS上遇到了写入文件的IOError。没有磁盘空间或权限问题,所以我认为这只是一个网络打嗝。显而易见的解决方案是将write包装在try-except中,但我很好奇Python中的print和write的实现是否会使得以下任何一个或多或少引发IOError:

f_print = open('print.txt', 'w')
print >>f_print, 'test_print'
f_print.close()

VS

f_write = open('write.txt', 'w')
f_write.write('test_write\n')
f_write.close()

(如果重要,特别是在Linux上的Python 2.4中)。

1 个答案:

答案 0 :(得分:1)

打印是根据写入实现的,最终会导致对内核的write(2)调用。你可以在这两个样本上运行strace并且(在浏览了很多条件之后)看到相同的结果调用write(2)。

实际上,我只是这样做并且省略了2000多行输出:

execve("/usr/bin/python", ["python", "a.py"], [/* 43 vars */]) = 0
open("print.txt", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
write(3, "test_print\n", 11)            = 11
close(3)                                = 0

execve("/usr/bin/python", ["python", "b.py"], [/* 43 vars */]) = 0
open("write.txt", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
write(3, "test_write\n", 11)            = 11
close(3)                                = 0

在那里看不到很多差异。无论目标文件是本地磁盘还是NFS挂载,write()调用都是相同的。经常命名的梦魇文件系统 - 所有其他条件相同 - 比本地磁盘更频繁地失败。