在Python中调用os.unlink(__ file__)是否安全?

我在Linux上使用Python 2.6。

我有一个run.py脚本,在后台启动多个服务,并生成kill.py来杀死这些进程。

在kill.py里面,当它完成它的工作时,是否可以自行解除链接?

import os # kill services os.unlink(__file__) # is it safe to do something here? 

我是Python新手。 我担心的是,由于Python是一种脚本语言,整个脚本可能不在内存中。 解除链接后,将不会有进一步的解释代码。

我试过这个小testing。

 import os import time time.sleep(10) # sleep 1 os.unlink(__file__) time.sleep(10) # sleep 2 

当运行这个文件时,我运行stat kill.py ,并且链接的数量总是1,所以我猜Python解释器没有链接到文件。

作为一个更高层次的问题,创build一个被简单处理的进程列表的常用方法是什么?

如果可以避免的话,不要让脚本写新脚本 – 只需写下一个PID列表,然后通过它们。 目前还不清楚你想做什么,但是创建和删除脚本听起来像是太脆弱的魔法。

要回答这个问题:Python编译所有的源代码并在执行之前关闭文件,所以这是安全的。

一般来说,在Linux上解开一个打开的文件是安全的。 (但不是在任何地方:在Windows上,您不能删除正在使用的文件。)

请注意,当您import模块时,Python 2会将其编译为.pyc字节码文件并解释该文件。 如果你删除.py文件,Python仍然会使用.pyc ,反之亦然。

只是不要叫重装 !

由于在导入时编译和加载,所以不需要Python对文件进行锁定。 事实上,在程序运行时交换文件的能力通常是非常有用的。

IIRC(!):如果在* nix上,unlink只删除文件系统中的名字,当最后一个文件句柄关闭时,inode被删除。 因此,这应该不会引起任何问题,除了python试图重新打开文件。

作为一个更高层次的问题,创建一个被简单处理的进程列表的常用方法是什么?

我会把PID放在一个list并用os.kill迭代它。 我不明白你为什么要创建和执行一个新的脚本。

Python在读取整个源文件并在执行之前将其编译,所以您不必担心删除或更改正在运行的脚本文件。