2017-02-06 11 views
-1

Я хочу скопировать список файлов в windows с помощью python. При выполнении этого вручную я вижу тайм-ауты в некоторых файлах, поэтому процесс копирования завершается с ошибкой. Мне нужен способ реализовать проверку тайм-аута в python.Использовать тайм-аут в windows filecopy

До сих пор я использую win32 API:

import win32file 
files = {'source_a' : 'dest_a', 'source_b' : 'dest_b'} 

for f in files.keys(): 
    win32file.CopyFileW(f,files[f],0) 

В некоторых случаях функция CopyFileW не возвращается в «разумный срок», ради этого обсуждения, скажем, 5 секунд. Как перенести эту функцию на таймер?

Редактировать: Как я уже говорил, я переключился на использование функции CopyFileEx, потому что у нее есть интерфейс отмены. Если я поставлю проверку тайм-аута в функции обратного вызова, процесс копирования будет остановлен до тех пор, пока выполняется обратный вызов. Насколько я понимаю, вызовы функции обратного вызова выдаются только тогда, когда есть некоторая операция копирования файлов. Если НЕ ПРОДОЛЖАЕТСЯ более долгое время, я этого не вижу.

+0

Более точную формулировку оставшихся вопросов, а также очень краткий ответ можно найти здесь: http://stackoverflow.com/questions/42203579/cancel-a-stalled-file-copy-in-python-on -windows – Dschoni

ответ

2

Вместо CopyFile используйте CopyFileEx, который предоставляет интерфейс, который поддерживает отмену.

+0

Это также относится к метаданным? (Как CopyFileW делает?) – Dschoni

+2

Да, так оно и есть. Этот факт четко изложен в документации, к которой я привязан. Пожалуйста, найдите время, чтобы прочитать все. –

+1

@Dschoni - 'CopyFile (lpExistingFileName, lpNewFileName, bFailIfExists)' реализация просто вызывает 'CopyFileEx (lpExistingFileName, lpNewFileName, 0,0,0, bFailIfExists? COPY_FILE_FAIL_IF_EXISTS: 0);' обычные окна api practic - если 'fn' и' fnEx 'api exist -' fn' call 'fnEx' с дополнительными параметрами, установленными на значения по умолчанию (в большинстве случаев до 0) – RbMm

 Смежные вопросы

  • Нет связанных вопросов^_^