Почему файлы * .pyc удаляются при удалении связанного файла * .py - PullRequest
3 голосов
/ 27 октября 2011

См. Обновление в конце.

Я использую Ubuntu Linux 11.10, Python 3.

Я написал скрипт Python, который конвертирует некоторые файлы Qt * .ui в * .py с использованием pyuic4,Затем я хочу скомпилировать полученный файл * .py в * .pyc и удалить файл * .py.

По какой-то причине, когда я удаляю преобразованный файл * .py, версия * .pyc также удаляется.:

try:
    command = 'pyuic4 -o /home/vic/ui_form.py /home/vic/form.ui'
    output = subprocess.check_output(command, shell= True, stderr= subprocess.STDOUT)
except subprocess.CalledProcessError as e:
    print('Failed:', e.output)
else:
    print('Converted %s to %s' % (source, targetName))

# convert *.py to *.pyc and delete the source
source = '/home/vic/ui_form.py'
target = source + 'c' # py -> pyc
py_compile.compile(source, target)
#shutil.copy(target, target + '_') # if uncommented - the *.pyc_ file remains
os.remove(source) # if commented - both *.py and *.pyc files remain, otherwise both deleted (?)

Я не знаю, что происходит (дополнительную информацию см. В комментариях к коду).

Я подумал, что получу подсказку, если найду ВОЗ, удаляющую файл -может быть, это pyuic4?

Есть ли возможность отслеживать, какой процесс удаляет файл?


ОБНОВЛЕНИЕ:

Я отлаживал шаг за шагомшаг.После выполнения os.remove(source) оба файла (* .py - source и * .pyc) будут удалены.

Может ли это быть поведение Python?

Ответы [ 4 ]

6 голосов
/ 27 октября 2011

Вы можете установить sysctl -w vm.block_dump=1, чтобы видеть каждое действие файловой системы в dmesg.(большая громкость, поэтому отключите снова потом)

1 голос
/ 27 октября 2011

Вы можете использовать inotify для обнаружения активности файловой системы.Смотрите руководство.Цитирую руководство:

       IN_DELETE         File/directory deleted from watched directory (*).
       IN_DELETE_SELF    Watched file/directory was itself deleted.

Не уверен, сможешь ли ты узнать кто его удалил.Другая идея:

chattr +i test.py

и посмотреть, пытается ли какая-либо команда безуспешно удалить ее (и выдает сообщение об ошибке).

1 голос
/ 27 октября 2011

Я весь день сходил с ума от этой проблемы, и, как это часто бывает, решение было близко, но другого типа:

У меня есть этот проект открытый в Eclipse.Когда Eclipse открыт, он отслеживает создание новых файлов * .py (из * .ui или * qrc).Затем Eclipse автоматически добавляет их в проект.

Когда скрипт преобразует файлы * .py в * .pyc и удаляет файлы * .py - Eclipse также отслеживает это и тщательно удаляет соответствующие файлы * .pyc.

.

0 голосов
/ 27 октября 2011

Вы можете попробовать использовать auditd .Я не пробовал, но это может быть полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...