【发布时间】:2012-04-11 19:27:24
【问题描述】:
是否可以制作一个 python 脚本,在 Windows 中执行(自删除)结束时删除 .py 文件?
【问题讨论】:
-
你为什么要这个?
-
我能想到几个原因 ;)
-
为了使用网络套接字更新脚本,我需要在收到更新后删除原始脚本
标签: python windows self-destruction
是否可以制作一个 python 脚本,在 Windows 中执行(自删除)结束时删除 .py 文件?
【问题讨论】:
标签: python windows self-destruction
这种方式使您的程序不依赖于操作系统。
from os import remove
from sys import argv
remove(argv[0])
奖励积分: 解析参数时,您在 sys.argv 中获得的第一个参数等于“path-to-filename/filename.py”
【讨论】:
Neomind 的回答似乎可以解决问题。但是,如果在内存中删除文件让您感到困扰,并且您正在寻找纯 python 解决方案,那么您可以使用 subprocess 创建一个新进程,其明确目的是删除原始脚本文件。像这样的东西应该可以工作:
import sys, subprocess
subprocess.Popen("python -c \"import os, time; time.sleep(1); os.remove('{}');\"".format(sys.argv[0]))
sys.exit(0)
您可能不需要在其中设置超时,但我添加它只是为了确保原始脚本中的进程有足够的时间自行关闭。
【讨论】:
shell=True。
我不确定在内存中删除文件是否是个好主意。尝试从关闭脚本进程的脚本运行批处理文件,然后删除脚本文件。
可能有自毁脚本的本地方法,但我不知道。
编辑:这是一个简单的示例,说明如何使用我描述的方法完成此操作:
在脚本中
# C:\test.py
import os
os.startfile(r"C:\sampleBatch.bat")
在批次中
# C:\sampleBatch.bat
TASKKILL /IM "process name" #For me, this was "ipy64.exe" because I use IronPython.
DEL "C:\test.py"
您甚至可能不需要终止进程来删除文件,但这样做更安全。希望这会有所帮助。
【讨论】:
是的,您可以使用以下内容:
import os
import sys
import subprocess
# execute and remove after run
(Your python code)
# end of file
dir = os.getcwd()
os.remove(dir+'\%s' % sys.argv[0])
这个脚本当然可以修改,但除此之外应该可以工作
【讨论】:
有一个比较简单的方法:
import os
os.remove("insert the file's path")
如果您遇到问题,请在开始的引号前加一个“r”。
【讨论】:
您也可以使用atexit 模块。
import os, atexit
atexit.register(lambda file = __file__: os.remove(file))
【讨论】: