Linux 删除关联的*.py文件时删除*.pyc文件的原因
请参见末尾的更新 我正在使用UbuntuLinux11.10,Python3 我编写了一个Python脚本,它使用pyuic4将一些Qt*.ui文件转换为*.py。然后我想将获得的*.py文件编译成*.pyc并删除*.py文件 出于某种原因,当我删除转换后的*.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
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未完成的争用条件?