首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中调用os.unlink(__file__)安全吗?

问在Python中调用os.unlink(__file__)安全吗?
EN

Stack Overflow用户
提问于 2011-12-01 06:09:32
回答 5查看 939关注 0票数 3

我在linux上使用Python 2.6。

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

在kill.py内部,当它完成它的工作时,解除自身的链接是否安全?

代码语言:javascript
复制
import os
# kill services
os.unlink(__file__)
# is it safe to do something here?

我是Python的新手。我担心的是,由于Python是一种脚本语言,整个脚本可能不在内存中。取消链接后,将不再需要解释更多代码。

我试过这个小测试。

代码语言:javascript
复制
import os
import time
time.sleep(10)       # sleep 1
os.unlink(__file__)
time.sleep(10)       # sleep 2

我在运行这个文件时运行了stat kill.py,链接的数量始终为1,所以我猜Python解释器没有保存指向该文件的链接。

作为一个更高层次的问题,创建一个稍后可以轻松终止的进程列表的通常方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-12-01 06:31:34

如果可以避免的话,不要让你的脚本编写新的脚本--只要写出PID的列表,然后通过它们。你想做什么并不是很清楚,但创建和删除脚本听起来像是太脆弱的魔术了。

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

通常,在Linux上取消链接打开的文件是安全的。(但不是所有地方:在Windows上,您不能删除正在使用的文件。)

请注意,当您对一个模块执行import时,Python2会将其编译成一个.pyc字节码文件并对其进行解释。如果删除.py文件,Python仍将使用.pyc,反之亦然。

票数 2
EN

Stack Overflow用户

发布于 2011-12-01 06:17:16

别给reload打电话!

Python不需要对文件进行锁定,因为它们是在导入时编译和加载的。实际上,在程序运行时交换文件的能力通常非常有用。

票数 1
EN

Stack Overflow用户

发布于 2011-12-01 06:24:09

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8333658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档