Linux 删除关联的*.py文件时删除*.pyc文件的原因

Linux 删除关联的*.py文件时删除*.pyc文件的原因,linux,ubuntu,file,python,process,Linux,Ubuntu,File,Python,Process,请参见末尾的更新 我正在使用UbuntuLinux11.10,Python3 我编写了一个Python脚本,它使用pyuic4将一些Qt*.ui文件转换为*.py。然后我想将获得的*.py文件编译成*.pyc并删除*.py文件 出于某种原因,当我删除转换后的*.py文件时,*.pyc版本也会被删除: try: command = 'pyuic4 -o /home/vic/ui_form.py /home/vic/form.ui' output = subprocess.check

请参见末尾的更新

我正在使用UbuntuLinux11.10,Python3

我编写了一个Python脚本,它使用pyuic4将一些Qt*.ui文件转换为*.py。然后我想将获得的*.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行为吗?

您可以尝试使用。我没有尝试过,但它可能会有所帮助。

您可以使用
inotify
来检测文件系统活动。请参阅手册。引用手册:

       IN_DELETE         File/directory deleted from watched directory (*).
       IN_DELETE_SELF    Watched file/directory was itself deleted.
不确定你是否能找到删除它的人。另一个想法是:

chattr +i test.py

并查看是否有命令试图删除它(并给出错误消息)。

我整天都在为这个问题发疯,而且,正如经常发生的那样,解决方案很快就要出现了,但情况不同:

我在Eclipse中打开了这个项目。当Eclipse打开时,它跟踪新的*.py文件的创建(从*.ui或*qrc)。然后Eclipse会自动将它们添加到项目中

当脚本将*.py文件转换为*.pyc并删除*.py文件时,Eclipse也会跟踪并小心地删除相应的*.pyc文件


就是这样。

您可以设置
sysctl-wvm.block_dump=1
来查看
dmesg
中的每个文件系统操作。(高容量,所以以后再次禁用)

source=target
-那么target最初是您的.py?这是在哪里初始化的?为什么有
target
targetName
?很抱歉,我从更大的代码中获取了这个。我将简化这个过程。在编码时请注意复制粘贴。许多错误来自于复制粘贴代码,而没有真正关注正在做的事情。使用通用模块而不是复制粘贴。此外,此IMHO更适合StackOverflow。使用strace-f并在日志中搜索取消链接。
strace-f
帮助-它显示
取消链接
调用,但仅显示删除的
*.py
文件。当*.py被删除并且*.pyc也被操作系统删除时,是否存在编译*.py->*.pyc未完成的争用条件?