#python #python-3.x
#python #python-3.x
Вопрос:
Как удалить исполняемый файл python после его завершения? Я попробовал следующее:
os.remove()
— удаление EXE-файла pythonos.chmod()
— удаление только для чтенияos.getcwd
— в сочетании сos.remove()
shutile.rmtree
— в сочетании сos.getcwd()
sys.argv[0]
Все это работает, когда я все еще использую .py
расширение, но когда я его конвертирую exe
, оно выдает мне ошибку разрешения. Как мне его удалить?
Я хочу удалить main.exe
, потому что я собираюсь распространить его среди своих друзей. Я не хочу, чтобы программа постоянно оставалась в их системе, поэтому я решил создать скрипт автоматического удаления.
Код, который я запускаю, вращается под pyqt5.
Комментарии:
1. Это зависит от операционной системы. Какой из них вы используете?
2. windows10 — 64bit
3. Вы буквально имеете в виду
python.exe
? Как бы вы запустили код python, если вы удалите это?4. нет, не python.exe . я имел в виду main.py преобразованный в main.exe использование pyinstaller. извините за недоразумение.
Ответ №1:
вы можете добиться этого, создав отдельный bat-файл и вызвав его после выполнения вашего кода
if __name__ == "__main__":
main()
cleanup()
вот функция очистки
import os
import sys
def cleanup():
with open("cleanup.bat", "w ") as file:
file.write(f"DEL /F "{sys.argv[0]}" nDEL /F "{os.getcwd()}\cleanup.bat"")
os.startfile(os.getcwd() "\cleanup.bat")
Ответ №2:
- Я бы начал с того, что убедился, что то, что вы пытаетесь сделать, — это то, что вам действительно нужно. Если вы предоставите более подробную информацию о своей реальной цели, возможно, мы могли бы найти лучшее решение без использования странных обходных путей и / или костылей для решения вашей проблемы
- В Windows 10 невозможно удалить исполняемый файл, когда он запущен (независимо от того, пытаетесь ли вы удалить файл изнутри или снаружи исполняемого файла), вот почему вы получаете ошибку разрешения с файлом .exe. Возможно, есть какой-то обходной путь, который будет использовать некоторые специальные функции только для Windows (потому что, насколько я понимаю, невозможно сделать то, о чем вы спрашиваете, с такими библиотеками, как
threading
/multiprocessing
), но если вы действительно хотите это сделать, самый простой способ, который я вижу, — использовать другой исполняемый файл, предназначенный специальночтобы удалить исполняемый файл, который вызывает его после завершения исходного исполняемого файла.
Но, опять же, это не очень хорошее решение, и, честно говоря, я не думаю, что оно идеальное, потому что ваша цель кажется мне антишаблоном
Комментарии:
1. Я планирую создать другой исполняемый файл, предназначенный для удаления main.exe но это мое последнее средство. Пытаюсь найти другое решение, которое находится в одном исполняемом файле.
2. @mangoorange Как насчет вашей реальной цели? Почему вы хотите удалить исполняемый файл после запуска?
3. Я отредактировал текст своего вопроса. Поскольку я буду распространять исполняемый файл среди своих друзей, я хочу, чтобы программа использовалась только один раз.
4. @mangoorange Вы можете попробовать запустить пакетную команду, которая подождет несколько секунд, тем временем программа python завершится, после задержки пакетная команда удалит EXE-файл. Вы также можете попробовать запустить новый экземпляр python (без выделенного нового .exe), просто запустив
python.exe -c "myDelay myDeleteCommand"
5. @CarloZanocco хорошо, я собираюсь попробовать. Спасибо!