Как сделать самоудаление программы на python
Перейти к содержимому

Как сделать самоудаление программы на python

  • автор:

Удаление (CRUD) — Python: Разработка на фреймворке Django

Удаление – самое простое действие в обычном CRUD. Ему не нужен шаблон. Удаление состоит из простого обработчика, в котором нет условных конструкций. В этом уроке научимся правильно удалять сущности.

Для удаления сущности, нужно добавить новые маршрут и обработчик:

Маршрут

from django.urls import path from hexlet_django_blog.article.views import IndexView, ArticleFormView, ArticleFormEditView, ArticleFormDeleteView urlpatterns = [ # . path('/delete/', ArticleFormDeleteView.as_view(), name='articles_delete'), ] 

Обработчик

class ArticleFormDeleteView(View): def post(self, request, *args, **kwargs): article_id = kwargs.get('id') article = Article.objects.get(id=article_id) if article: article.delete() return redirect('articles') 

Самое интересное в удалении – это ссылка или кнопка удаления. Она не может быть обычной ссылкой. С точки зрения HTTP, удаление — это DELETE-запрос. Эту семантику важно соблюдать, так как на нее ориентируются разные инструменты и поисковики при анализе страниц.

Django, как и большинство python фреймворков, принимает данные через GET или POST запросы. Для обработки таких запросов как DELETE или PATCH используются маршруты, содержащие в себе название действия и привязанные к соответствующим обработчикам POST запросов.

Но если сделать удаление обычной ссылкой, то любой автоматический инструмент может попробовать перейти по ней, например, предзагрузка страниц в Chrome. Это будет крайне неприятный сюрприз.

Чтобы решить подобную проблему, сделаем ссылку на удаление формой:

 action="" method="post">  type="submit" value="Удалить">  

Зависимости

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов

Наши выпускники работают в компаниях:

Программа должна удалить сама себя

Author24 — интернет-сервис помощи студентам

Программа должна после принятия фразы «пока» удалить файл test.exe, который находится на диске D, где как раз таки и есть .exe файл программы, но когда я пишу «пока», программа просто закрывается, но не удаляет test.exe из диска D, то бишь не удаляет себя, подскажите что не так?

Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Программа, выводящая сама себя
Цель — написать такую программу, используя минимальное количество средств (я знаю только питон.

Может ли программа удалить сама себя?
Сначала я подумал, что нет. Да. Напрямую она конечно себя не удалит. А вот если она вызовет другую.

Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х)
Вводим число х. Функция должна вызывать сама себя до тех пор пока sum не станет больше х. Но.

Программа копирует сама себя
1)Как сделать что бы после запуска программы пошел оcчет 15 сек а затем запустилась программа .

Программа, копирующая сама себя
Нужно, чтобы программа скопировала сама себя в определенную папку. Если есть идеи, прошу отписать.

1728 / 968 / 199
Регистрация: 22.02.2018
Сообщений: 2,694
Записей в блоге: 6

Vladks, Программа, которая удаляет саму себя, может использоваться только как вредоносная программа. То есть напакостила и сама удалилась, что бы не оставлять следов.
Можно конечно использовать для демонстрации программы с последующим удалением с компьютера, что бы не могли ее использовать официально не приобретя. Но только автоматически я думаю это не возможно, так как ОС не удаляет программу с диска, а только помечает в таблице ее как удаленную, и позволяет в дальнейшем на ее месте записывать другие файлы. Но пока на ее месте не записано что то другое, ее можно восстановить. Поэтому те кто демонстрируют свою программу потом удаляют ее физически с диска. Как они это делают, не знаю, но как то делают.

Удаление файла — пошаговое руководство

Спектр применения различных файлов огромен. Именно поэтому умение их удалять — важный навык. С помощью Python вы можете удалить любой файл на компьютере.

Допустим, вы пишете программу, которая анализирует статистику фондового индекса S&P 500 и записывает ее в файл. Возможно, вы хотите удалить уже существующий файл, чтобы освободить место для нового.

Метод os.remove() позволит вам удалить файл, а метод os.rmdir() — пустую папку. Если нужно удалить папку вместе с файлами внутри, можно воспользоваться методом shutil.rmtree() .

В этом руководстве мы научимся удалять файлы с помощью вышеуказанных методов, а также рассмотрим примеры их использования.

Руководство по удалению файлов

Как уже было сказано, в Python есть несколько методов для удаления файлов — os.remove() , os.rmdir() и shutil.rmtree() . Предназначены они для удаления файлов, директорий и папок с файлами внутри соответственно.

Как удалить файл с помощью метода os.remove()

Метод os.remove() используется для удаления файлов с жесткого диска. Важно: с его помощью нельзя удалить папку, только файл.

Модуль os позволяет разработчикам работать с операционной и файловой системой компьютера. os.remove — метод для удаления отдельных файлов, встроенный в модуль os .

Начать работу с этим методом просто — нужно импортировать модуль os с помощью оператора import .

import os

Теперь мы готовы удалять файлы с помощью метода os.remove() . Рассмотрим синтаксис этого метода:

import os os.remove(путь_к_файлу)

Метод os.remove() принимает один параметр — путь к файлу, который мы хотим удалить.

Допустим, мы пишем программу, которая анализирует оценки учеников математического класса в течение года.

Наши данные мы будем хранить в файле /home/school/math/final_analysis.csv. Но создавать файл сразу нельзя: возможно, он уже существует.

Чтобы удалить этот файл, можно написать следующую программу:

import os path = "/home/school/math/final_analysis.csv" os.remove(path) print("final_analysis.csv удален.")

Файл удален. Также мы вывели сообщение с помощью оператора print() :

final_analysis.csv удален.

В первой строке программы мы импортируем модуль os . В нем содержится метод os.remove() , который мы использовали в нашей программе. Затем мы объявляем переменную path . Эта переменная хранит себе путь к файлу, который мы хотим удалить.

Затем мы вызываем os.remove() и передаем в качестве аргумента path . После этого происходит удаление файла.

Удаление пустой директории с помощью os.rmdir()

Метод os.remove() не позволяет удалить папку. В этом вам поможет метод os.rmdir() , который используется для удаления пустых файлов и директорий.

Метод os.rmdir() принимает лишь один параметр — путь к папке, которую вы хотите удалить. Синтаксис этого метода выглядит так:

import os os.rmdir(file_path)

Допустим, мы решили хранить наши обработанные данные внутри папки final, которая находится внутри /home/school/math directory. После запуска программы мы эту папку удаляем, ведь создаем точно такую же новую. Для удаления папки final можно написать следующую программу:

import os path = "/home/school/math/final" os.rmdir(path) print("/home/school/math/final удалена.")

Наша программа удаляет директорию /home/school/math/final и печатает в консоль следующее:

/home/school/math/final удалена.

Метод os.rmdir() используется для удаления только пустых директорий. Если внутри папки будут содержаться файлы, программа вернет ошибку:

[Errno 13] Permission denied: '/home/school/math/final' Directory 'final' can not be removed

Допустим, вы пишете программу для удаления файлов. Вам может понадобиться функция, корректно обрабатывающая ошибки в случае их возникновения. В этом случае вам поможет блок try except .

В примерах выше мы видели, что в некоторых случаях может быть возвращена ошибка (например, если методу не хватает прав для удаления объекта). Если мы используем os.remove() для удаления директории — программа вернет ошибку. И если мы используем os.rmdir() для удаления папки, содержащей файлы, тоже будет возвращена ошибка.

Когда вы пишете программу, удаляющую файлы, вам может понадобиться функция, которая обрабатывает ошибки. Здесь вам пригодится блок except :

В примере вы видите использование того же метода os.rmdir() , но с механизмом обработки ошибок. В случае возникновения ошибки этот механизм выводит заранее определенное сообщение.

import os path = "/home/school/math/final" try: os.rmdir(path) print("/home/school/math/final удален.") except OSError as error: print("Возникла ошибка.")

Если мы запустим этот код и ошибок не возникнет, то папка будет удалена и в консоль выведется следующее:

/home/school/math/final удален.

Но если попытаться удалить тем же способом папку, содержащую файлы, программа выведет в консоль следующее сообщение:

Возникла ошибка.

В нашей программе мы использовали блок except . Выполнение начинается с проверки блока try . Если возникает ошибка — выполняется код внутри блока except . То есть, этот блок выполняется при возникновении ошибки OSError.

Удаление папки с файлами с помощью shutil.rmtree()

В библиотеке shutil есть метод shutil.rmtree() . Он используется для удаления папок, содержащих файлы.

Вообще эта библиотека предлагает сразу несколько методов, позволяющих проводить манипуляции с файловой системой. Но сейчас мы поговорим о shutil.rmtree() , с помощью которого можно удалить папку вместе с содержащимися в ней файлами.

Синтаксис метода shutil.rmtree() выглядит так:

import shutil shutil.rmtree(file_path)

Обратите внимание — мы импортируем модуль shutil . Как и os.remove() , метод shutil.rmtree() является частью внешнего модуля — именно поэтому мы проводим импорт.

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

import shutil path = "/home/school/math/final" shutil.rmtree(path) print("/home/school/math/final удалена.")

Наша программа удаляет папку final и все ее содержимое. После этого в консоль выводится следующее сообщение:

/home/school/math/final удалена.

Как реализовать на Python 3 удаление определенного приложения(программы) на Windows 10?

То есть мне надо написать код, который удаляет определенную программу, желательно без участия пользователя. Удаляемая программа не wmic (т.е. установлена не установщиком Windows), поэтому, например, такой код не подойдет:

import os path = 'file.bat' with open(path, 'w') as f: s = 'wmic product where name="<>" call uninstall /nointeractive'.format('Название программы') f.write(s) os.startfile(path) 

Я так понял нужно использовать тоже bat-файл, но команда нужна другая. Наверное. Буду очень благодарен за помощь!!

Отслеживать
задан 24 апр 2020 в 6:41
23 7 7 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

  • Используйте os.remove(«путь до файла») — удаление файла
  • os.rmdir(«путь до файла») — удаление пустой папки
  • shutil.rmtree(«путь до файла») — удаление папки с файлами

Обратите внимание: python воспринимает только пути, в которых нет одиночного \ — (backslash). Например, он примет путь D:/папка/файл или C:\\папка\\файл. Но не примет D:\папка\файл.

И так, пример использования shutil.rmtree():

import shutil shutil.rmtree("D:/111/new") 

Если вы хотите удалять что-либо через .bat файл — нужно создать .bat файл и записать в него команду: (выберите наиболее подходящую)

  • del «адрес файла» (удаляет одиночный файл или все файлы из папки, сохраняя папку)
  • rd «адрес файла» (удаляет папку)
  • rmdir делает тоже, что и rd

Вы можете добавить в конце строки или после самой команды:

  • /s — будут удалены все вложения (в противном случае вы получите уведомление папка не пуста и она не будет удалена)
  • /Q удаляет файлы без подтверждения. Иначе появится окно:
rd "D:\111\Новая папка" /s /Q 

Файл готов, теперь его нужно запустить через python. Для этого используйте subprocess

import subprocess subprocess.Popen('адрес файла') 

Popen это не опечатка, команда появилась от слов «process open»

Вам нужно будет записать пути вручную или вводить корректные пути, который может воспринять python либо добавить префикс r в начало строки. Пример: shutil.rmtree(r»C:\Users\Пользователь\Desktop\Новая папка»)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *