24

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

4

6 回答 6

26

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

from os import remove
from sys import argv

remove(argv[0])

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

于 2013-12-11T23:49:02.577 回答
10

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)

您可能不需要超时,但我添加它只是为了确保原始脚本中的进程有足够的时间自行关闭。

于 2015-04-10T19:49:51.500 回答
6

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

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

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

在脚本中

# 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"

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

于 2012-04-11T19:30:29.017 回答
2

是的,您可以使用以下内容:

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])

这个脚本当然可以修改,但除此之外应该可以

于 2018-01-19T21:30:37.473 回答
2

有一个比较简单的方法:

import os   

os.remove("insert the file's path")

如果您遇到问题,请在起始引号之前放置一个“r”。

于 2017-04-19T10:49:46.687 回答
1

您也可以使用该atexit模块。

import os, atexit

atexit.register(lambda file = __file__: os.remove(file))
于 2021-04-30T13:39:09.367 回答