2012-04-11 71 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]) 

該腳本可以被修改,當然,但除此之外,這個應該工作