为什么os.read在python的第二次调用中返回空

时间:2013-02-24 01:49:24

标签: python

我试试这个

fd = os.open("myfd.txt",os.O_RDWR)


In [28]: os.read(fd,24)
Out[28]: 'my test is good\n'

In [29]: os.read(fd,24)
Out[29]: ''

为什么在第二次通话中它返回空

当打印fd时,它返回3作为filedescriptor,这是3号的含义

2 个答案:

答案 0 :(得分:1)

因为在那时,文件指针位于文件的末尾(由于第一次读取所有数据)。看起来您需要os.lseek来重置文件指针:

print os.read(fd,24)
os.lseek(fd,0,0)
print os.read(fd,24)

请注意,如果可以提供帮助,普通文件对象通常更容易使用:

with open('filename') as fin:
    print fin.read(24)
    fin.seek(0)
    print fin.read(24)

答案 1 :(得分:0)

当您进行第一次读取调用时,文件指针前移了24个字节(或字符),因此您可能会到达文件的末尾。

3只是一个描述符,它对操作系统没有任何意义。它是3的原因是因为默认情况下已经采用了描述符0,1和2(0 = stdin,1 = stdout,2 = stderr)