2012-04-11 70 views
11

是否可以创建一个python脚本,它将在Windows执行结束时删除.py文件(自删除)?如何让脚本在执行结束时自动删除?

+0

,你为什么要这样? – delnan 2012-04-11 19:29:41

+0

我可以想到几个原因;) – 2012-04-11 19:30:43

+0

为了从使用网络套接字更新脚本,我需要在收到更新的脚本后删除原始脚本 – 2012-04-11 19:30:54

回答

3

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

可能有一个本机方法来自毁脚本,但我不知道它。

编辑:这里是你如何能做到这一点通过我介绍的方法,一个简单的例子:

在脚本

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

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

+0

是否有办法在关闭后自行破坏批处理文件脚本? – 2012-04-11 19:43:15

+0

批处理文件应该能够在进程关闭时销毁该文件。在批处理文件中使用DEL“scriptpathhere”命令来执行此操作。我会在一秒钟内放出一小段片断。 – covertCoder 2012-04-11 19:51:40

+0

在某些示例代码中为您添加。 – covertCoder 2012-04-11 20:04:58

6

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

from os import remove 
from sys import argv 

remove(argv[0]) 

加分点: 当解析参数非常第一个参数您在sys.argv中得到的是相当于“路径到文件名/ filename.py

3

Neomind的答案似乎去做把戏。但是,如果在内存中删除文件困扰你,并且你正在寻找一个纯粹的Python解决方案,那么你可以使用子进程创建一个新的进程,其目的是删除原始脚本文件。像这样的东西应该工作:

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

你可能不会需要超时在那里,但我已经添加它只是确保从原始剧本的过程中已经给出了足够的时间来关闭本身。

+0

在Python 3中,您必须添加'shell = True'。 – 2017-10-01 20:56:08

0

还有一种比较简单的方法:

import os 

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

如果你面临的问题,将一个“R”起始报价标记之前。

0

是的,你可以使用以下命令:

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

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