Как я могу удалить приложение после его закрытия?

#python #python-3.x

#python #python-3.x

Вопрос:

Как удалить исполняемый файл python после его завершения? Я попробовал следующее:

  • os.remove() — удаление EXE-файла python
  • os.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:

  1. Я бы начал с того, что убедился, что то, что вы пытаетесь сделать, — это то, что вам действительно нужно. Если вы предоставите более подробную информацию о своей реальной цели, возможно, мы могли бы найти лучшее решение без использования странных обходных путей и / или костылей для решения вашей проблемы
  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 хорошо, я собираюсь попробовать. Спасибо!