Возможно ли сделать 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 может быть изменен, конечно, но, кроме того, это должно работать