2014-09-03 37 views
4

说,我有一个原始的数字文件描述符,我需要根据它获取文件中的当前位置。在Python中获取文件描述符的位置

import os, psutil 

# some code that works with file 
lp = lib.open('/path/to/file') 

p = psutil.Process(os.getpid()) 
fd = p.get_open_files()[0].fd # int 

while True: 
    buf = lp.read() 
    if buf is None: 
     break 
    device.write(buf) 
    print tell(fd) # how to find where we are now in the file? 

在下面的代码lib是一个编译的库,它不允许访问该文件对象。在循环中,我使用嵌入方法read,它返回处理后的数据。数据和它的长度与文件位置无关,所以我无法在数学上计算偏移量。

我尝试使用fdopen,因为fd = fdopen(p.get_open_files()[0].fd),但print fd.tell()只返回文件中的第一个位置,它在循环中没有更新。

有没有办法根据文件描述符获取文件当前的实时位置?

+1

我觉得你对你的评论有点迷茫;)(应该是'''#''') – wnnmaw 2014-09-03 13:45:57

+1

@wnnmaw呀,该死的Ç':D' – VisioN 2014-09-03 13:48:02

+0

又何尝如果你正在阅读的文件不是这个过程中第一个打开的文件,它就像'p.get_open_files()[1]'等。 – bereal 2014-09-03 14:21:57

回答

1

所以,答案似乎很容易。我不得不使用os.lseekSEEK_CUR标志:

print os.lseek(fd, 0, os.SEEK_CUR) 

我不知道这是否是唯一的方法,但至少它工作正常。

INTERPRETED:ftell on a file descriptor?