Как сделать автоматическое удаление скриптов в конце выполнения?

Возможно ли сделать python script, который удалит файл .py в конце его выполнения (само удаление) в Windows?

Ответ 1

Я не уверен, что удалить файл, пока он в памяти будет хорошей идеей. Попробуйте запустить пакетный файл из script, который закрывает процесс script, а затем удаляет файл script.

Может существовать собственный метод для самоуничтожения script, но я не знаю об этом.

EDIT: Вот простой пример того, как вы могли бы выполнить это, используя описанный мной метод:

В script

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

Вам даже не нужно убивать процесс для удаления файла, но это безопаснее. Надеюсь, это поможет.

Ответ 2

Таким образом, ваша программа зависит от ОС.

from os import remove
from sys import argv

remove(argv[0])

Бонусные баллы: При анализе аргументов самый первый аргумент, который вы получаете в sys.argv, равен " path-to-filename/filename.py"

Ответ 3

Ответ Neomind, похоже, делает трюк. Но если удаление файла, когда оно в памяти беспокоит вас, и вы ищете чистое решение python, вы можете использовать подпроцесс для создания нового процесса с явной целью удаления исходного файла script. Что-то вроде этого должно работать:

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

Вам, вероятно, не понадобится тайм-аут, но я добавил его только для того, чтобы убедиться, что процесс из исходного script был предоставлен достаточно времени для закрытия.

Ответ 4

Существует довольно простой метод:

import os   

os.remove("insert the file path")

Если вы столкнулись с проблемами, поместите "r" перед отметкой начала цитаты.

Ответ 5

Да, вы могли бы использовать следующее:

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

Этот script может быть изменен, конечно, но, кроме того, это должно работать