代码之家  ›  专栏  ›  技术社区  ›  jkasnicki

打印与写入期间发生IOERROR的可能性

  •  2
  • jkasnicki  · 技术社区  · 15 年前

    我最近在写入nfs上的文件时遇到一个ioerror。没有磁盘空间或权限问题,所以我认为这只是网络故障。显而易见的解决方案是尝试将write包装为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上的Python2.4中)。

    1 回复  |  直到 15 年前
        1
  •  1
  •   msw    15 年前

    打印是以写的方式实现的,最终导致对内核的写(2)调用。你可以跑 strace 在这两个样本上,并且(在涉过很多谷壳之后)看到相同的结果调用来写入(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()调用都将相同。通常被命名为“噩梦”的文件系统将比本地磁盘更频繁地出现故障。