如何在执行结束时自动删除脚本?

Ser*_*van 14 python windows self-destruction

是否有可能制作一个python脚本,在Windows中执行(自删除)时删除.py文件?

小智 13

这种方式使您的程序不依赖于操作系统.

from os import remove
from sys import argv

remove(argv[0])
Run Code Online (Sandbox Code Playgroud)

加分点:解析参数时,你在sys.argv中获得的第一个参数等于" path-to-filename/filename.py "

  • 实际上,每个模块都注入了“__file__”变量,其中包含 .py 文件的完整路径。只需 `os.remove(__file__)` 无需检查 argv 或其他导入 (4认同)

nea*_*ick 7

Neomind的答案似乎可以解决问题.但是如果在内存中删除文件困扰您,并且您正在寻找纯python解决方案,那么您可以使用子进程创建一个新进程,其明确目的是删除原始脚本文件.这样的事情应该有效:

import sys, subprocess 
subprocess.Popen("python -c \"import os, time; time.sleep(1); os.remove('{}');\"".format(sys.argv[0]))
sys.exit(0)
Run Code Online (Sandbox Code Playgroud)

你可能不需要在那里超时,但我添加它只是为了确保原始脚本中的进程有足够的时间来关闭自己.


cov*_*der 6

我不确定在内存中删除文件是否是个好主意。尝试从关闭脚本进程的脚本运行批处理文件,然后删除脚本文件。

可能有一种自毁脚本的本机方法,但我不知道。

编辑:这是一个简单的示例,说明如何使用我描述的方法完成此操作:

在脚本中

# C:\test.py
import os
os.startfile(r"C:\sampleBatch.bat")
Run Code Online (Sandbox Code Playgroud)

在批

# C:\sampleBatch.bat
TASKKILL /IM "process name" #For me, this was "ipy64.exe" because I use IronPython.
DEL "C:\test.py"
Run Code Online (Sandbox Code Playgroud)

您甚至可能不需要终止进程来删除文件,但这样做更安全。希望这可以帮助。


AST*_*AST 5

您还可以使用该atexit模块。

import os, atexit

atexit.register(lambda file = __file__: os.remove(file))
Run Code Online (Sandbox Code Playgroud)