2014-09-03 12 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

+1

@wnnmaw Да, проклят C ': D' – VisioN

+0

Могущество его в случае, если файл, который вы читаете, не является первым открытым этим процессом, и это похоже на 'p.get_open_files() [1]' и т. д. – bereal

ответ

1

Итак, ответ кажется довольно простым. Я должен был использовать os.lseek с SEEK_CUR флагом:

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

Я не знаю, если это единственный подход, но, по крайней мере, он отлично работает.

INTERPRETED:ftell on a file descriptor?