Я не работаю в Linux и никогда не использовал возможности inotify, которые вы используете здесь. Я опишу, как я буду делать вещи в общем.
В простейшем случае вам нужно проверить, есть ли новый файл в каталоге загрузки, и когда он есть, начните делать уведомление о преобразовании.
Чтобы проверить, есть ли новые файлы, вы можете сделать что-то вроде:
import os
import time
def watch_directory(dirname="."):
old_files = set(os.listdir(dirname))
while 1:
time.sleep(1)
new_files = set(os.listdir(dirname))
diff = new_files - old_files
if diff:
print "New files", diff
old_files = new_files
watch_directory()
Возможно, вы сможете минимизировать некоторые издержки файловой системы, предварительно указав каталог, чтобы увидеть, есть ли какие-либо изменения.
def watch_directory(dirname="."):
old_files = set(os.listdir(dirname))
old_stat = os.stat(dirname)
while 1:
time.sleep(1)
new_stat = os.stat(dirname)
if new_stat == old_stat:
continue
new_files = set(os.listdir(dirname))
diff = new_files - old_files
if diff:
print "New files", diff
old_stat = new_stat
old_files = new_files
С inotify я думаю, что это все для вас, и вы помещаете свой код в process_IN_CREATE (), который вызывается, когда доступен новый файл.
Немного хитрости - откуда наблюдатель узнает, что загрузка завершена? Что произойдет, если загрузка будет отменена в процессе загрузки? Это может быть так же просто, как если бы веб-сервер выполнил переименование (), чтобы использовать одно расширение во время загрузки и другое расширение после завершения.
Как только вы знаете файл, используйте subprocess.Popen (Conversion_Program, "New_filename") или os.system ("Conversion_Program New_FileName &"), чтобы запустить преобразование в новом процессе, который выполняет преобразование. Вам нужно будет обрабатывать такие вещи, как отчеты об ошибках, например, когда ввод не в правильном формате. Он также должен очиститься, что означает, что после завершения преобразования он должен удалить входной файл из рассмотрения. Это может быть так же просто, как удалить файл.
Вам также нужно будет побеспокоиться о возобновлении любых конверсий, которые были убиты. Если машина не работает, как перезапущенный наблюдатель узнает, какие преобразования файлов данных также были уничтожены и должны быть перезапущены. Но это может быть выполнимо как ручной шаг.