Python перезагрузка компьютера удаленно

Обновлено: 06.07.2024

Как сделать автоматический запуск программы в определенный день?
Здравствуйте. Имеется файл name.sh, в нем записано, что нужно открыть антивирусную программу 15.

Автоматический запуск программы после критической ошибки. Как организовать?
Добрый день. Есть программа, использующая OpenCV. В идеале программа должна работать без.

Как сделать автоматический запуск формы после открытия документа?
1. Как сделать автоматический запуск формы после открытия документа? 2. Как сделать автоматический.

Как сделать автозапуск программы после включения компьютера?
Делаю пароль который, который нужно вводить при входе в windows, но появились 2 вопроса, как.

Решение

а как оно может быть активно при перезапуске? процесс то будет убит.
как вариант писать программу проверки которую закидываете в автозапуск. при запуске вашего файла создается текстовый файл где пишется допустим 1 и при закрытии вашей проги в файле перезаписывается 0. тогда программа из автозапуска будет проверять этот файл и если там 1 (был убит процесс а не закрыт вами) то тогда запускать вашу прогу. как это реализовать думайте сами. а как оно может быть активно при перезапуске? процесс то будет убит. тут я имел ввиду, что если прога активна была ДО перезапуска, то как сделать так, чтобы и после него она включилась самостоятельно Semen-Semenich, а можно ли это сделать в коде как нибудь??
без закидывания в автозапуск?

Открой для себя реестр windows, где тоже есть автозапуск и туда также можно записывать любые свои данные. Собственно, приложения на windows так и поступают, сохраняя туда все что им нужно для работы.

Ну а если у тебя не windows, то ты и так знаешь как планируют запуск приложения в линуксе (или не знаешь?).

Garry Galler, Semen-Semenich, то бишь мне просто нужно файл.exe закинуть туда и он будет каждый раз открываться при запуске ПК или только тогда, когда файл.exe будет убит при перезапуске а не закрыт? Нет Ты должен написать код. Реестр это не папка. и даже не мамка. Garry Galler, просто прогу в автозапуск ему не катит. я так понял если прога работала и комп перезапустили то и прога должна запуститься а если не работала то и не должна. автозапуск будет ее запускать постоянно.

Garry Galler, код в этом же файле, где и основной код?

Добавлено через 11 секунд

просто прогу в автозапуск ему не катит. я так понял если прога работала и комп перезапустили то и прога должна запуститься а если не работала то и не должна. автозапуск будет ее запускать постоянно.

Добавлено через 16 минут

а как это именно в коде проверить??

Добавлено через 18 минут
Semen-Semenich, Garry Galler,
вообщем , пытаюсь сделать так
вопрос, как написать закрытие файла в

Решение

Semen-Semenich, такой вариант:
программа стартанула, записала себя в автозапуск, перед "нормальным" завершением работы программы она удалила себя из автозапуска.

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

Добавлено через 1 минуту
u235, а как сделать так чтобы она себя туда записала и удалила?

а как сделать так чтобы она себя туда записала и удалила? если окно закрыть крестиком то в файле будет 1 а если убить процесс то в файле будет 0. теперь пишете скрипт который читает этот файл и если там 1 то запускает этот. скрипт прописываете в автозапуск

Ну или как у Semen-Semenich, что почти тоже самое, только через оконные события.

теперь пишете скрипт который читает этот файл и если там 1 то запускает этот. скрипт прописываете в автозапуск А зачем такие сложности? Сама прога и должна писать себя в реестр и удалять себя же. Или я не понял? Garry Galler, я тоже сразу ваш вариант не понял. получается при запуске прога прописывается в автозапуск если прога завершена корректно то удаляет себя из автозапуска. так конечно проще. просто с таким еще не сталкивался и не в курсе про atexit и написал свой велосипед. пойду изучать этот модуль. Кидай экзешник в папку по этому пути: C:\Users\user\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
user замени на свой Ychenyi, Я не пробовал. Попробуй, потом отпишись.

Решение

Добавлено через 2 минуты
Matrix3007,
Зачем давать неправильный совет? ТС-у не нужен просто автозапуск. Ему нужен автозапуск по условию.

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

Как сделать автоматический запуск csv выгрузки на компьютер
Нужно организовать запуск обработки 1С, выгружающей данные в файл csv в автоматическом режиме, по.

Как сделать автоматический запуск флеш анимации на странице?
Решил поставить флеш часы на сайт, но при перезагрузке или переходи на другу страницу сайта.

Как сделать автоматический запуск образа Virtual Box
Как на сервере Win 2008 r2 сделать, чтоб при включении запускался Virtual Box(можно просто.

После редактирования данных в БД, данные на форме обновляются только после перезапуска программы
Добрый день! Прошу помощи. Пишу программу Form1 работает с полями из БД MS Sql LocalDB, Form2 -.

I've written a Python script which should eventually shutdown the computer.

This line is a part of it :

It makes some sort of a shutdown but remains on the turn-on Windows control pannel (where the user can switch the computer users).

Is there a way to fully shutdown the computer?

I've tried other os.system("shutdown ___") methods with no success.

Is there another method which might help?

33.3k 22 22 gold badges 180 180 silver badges 243 243 bronze badges 573 2 2 gold badges 5 5 silver badges 15 15 bronze badges

11 Answers 11

This will work for you.


480 1 1 gold badge 4 4 silver badges 11 11 bronze badges

or: if you want immediate shutdown without sudo prompt for password, use the following for Ubuntu and similar distro's:


9,710 9 9 gold badges 55 55 silver badges 80 80 bronze badges


Using ctypes you could use the ExitWindowsEx function to shutdown the computer.

Description from MSDN:

Logs off the interactive user, shuts down the system, or shuts down and restarts the system.

First some code:

Now the explanation line by line:

  • Get the ctypes library
  • The ExitWindowsEx is provided by the user32.dll and needs to be loaded via WinDLL()
  • Call the ExitWindowsEx() function and pass the necessary parameters.

Parameters:

All the arguments are hexadecimals.

The first argument I selected:

shuts down the system and turns off the power. The system must support the power-off feature.

There are many other possible functions see the documentation for a complete list.

The second argument:

The second argument must give a reason for the shutdown, which is logged by the system. In this case I set it for Other issue but there are many to choose from. See this for a complete list.

Making it cross platform:

This can be combined with other methods to make it cross platform. For example:

This is a Windows dependant function (although Linux/Mac will have an equivalent), but is a better solution than calling os.system() since a batch script called shutdown.bat will not conflict with the command (and causing a security hazard in the meantime).

In addition it does not bother users with a message saying "You are about to be signed out in less than a minute" like shutdown -s does, but executes silently.

As a side note: I built WinUtils (Windows only) which simplifies this a bit, however it should be faster (and does not require Ctypes) since it is built in C.



Каждый пользователь компьютера сталкивался хотя бы раз в своей жизни с такой ситуацией: ты ушёл к себе на работу, почти доехал до неё и вдруг вспомнил,- что забыл взять со своего личного компьютера какую-то очень важную вещь.

Ехать обратно — опоздаешь на работу. А ведь ситуация может развиваться и гораздо более драматично: допустим, человек поехал куда-то далеко за рубеж, в отпуск, и там ему приходит важный звонок, по результатам которого ему необходимо передать своему визави,- определённые документы. А документы остались дома! А дом находится за границей!

Или вот ещё такая беда: ваш персональный компьютер является мощной графической станцией, на которой установлено множество тяжёлых программ для работы с графикой, программными продуктами. А вы перемещаетесь по городу, имея в руках всего лишь «тонкий» клиент, в виде ноутбука…

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

На самом деле, указанная проблема очень легко решается: установкой на ваш персональный компьютер системы удалённого включения/выключения и перезагрузки. Этот подход позволит всегда иметь под рукой всю мощь вашей домашней машины и все необходимые документы, и проекты, хранящиеся на ней.

До начала описания своей разработки, хочу сказать, что конечно, она не является единственно возможным способом для удалённого включения выключенного компьютера. Например, хорошо известна технология Wake-on-LAN. Суть этой технологии заключается в том, что она позволяет включить выключенный компьютер, отправкой специального пакета на его MAC-адрес.

Сетевой адаптер компьютера, поддерживающего Wake-on-LAN, находится в этот момент в режиме пониженного потребления и анализирует все пакеты на него. Если одним из поступающих пакетов окажется так называемый magic packet, сетевой адаптер выдаст сигнал на включение питания компьютера.

Согласно wiki: Magic packet — это специальная последовательность байтов, которую для нормального прохождения по локальным сетям можно вставить в пакеты транспортного уровня, не требующие установки соединения (например, протокол UDP или устаревший IPX). Обычно для Wake-on-LAN пакеты протоколов верхнего уровня рассылают широковещательно, так как в случае динамического присвоения адресов неизвестно, какой IP-адрес соответствует какому MAC-адресу. Однако, для корректного прохождения через маршрутизатор, запрещающий широковещательные пакеты, можно послать пакет по какому-то определённому адресу.

Из минусов данной технологии стоит отметить, что она:

  1. должна поддерживаться аппаратно (например, мой компьютер её не поддерживает, насколько мне известно); некоторые пользователи, наблюдаются проблемы с восстановлением работы, если пропадало напряжение в сети или компьютер вынимали из розетки;
  2. является небезопасной, хотя бы даже из-за этого.

В любом случае, я подумал, что создание девайса, о котором пойдёт дальше речь, будет интересной затеей, так как:

  1. это более безопасно, чем Wake-on-LAN;
  2. можно установить даже на устройства, не поддерживающие Wake-on-LAN;
  3. прошивка устройства снабжена средствами восстановления связи, после пропадания питания/перезагрузки;
  4. позволяет принудительно перезагрузить «зависший» компьютер — удалённо;
  5. в принципе интересно, так как позволяет реализовать новый девайс на esp32, в рамках растущего «интернета вещей».

▍ Итак, приступим.

Некоторое время назад, решение указанной проблемы было достаточно затруднённым: необходимо было обладать достаточно высоким уровнем профессионализма и наличием глубоких знаний в области электроники, чтобы собрать требуемое для решения этой задачи устройство.

С появлением платформы Arduino, данная задача существенно облегчилась, однако, она продолжала оставаться достаточно неудобной в своей реализации, ввиду наличия клубка проводов, соединяющих требуемые компоненты, либо, ввиду необходимости покупки соответствующих wi-fi шилдов.

В текущее же время, этот вопрос ещё более облегчился, из-за появления платы espressif esp32. Для тех, кто не знает, это двухъядерный модуль, содержащий множество необходимых для любого самодельщика свойств. В рамках же данного проекта, нас будет интересовать наличие встроенного wi-fi модуля.

Использование этой платы позволит нам легко и просто построить требуемое устройство, не загромождая всё проводами и за достаточно малую цену. Рискну предположить, что суммарная стоимость компонентов нашего решения не превысит 350-400 руб.

Для того, чтобы создать устройство, нам понадобится всего лишь четыре резистора, два мосфет- транзистора и плата esp32.

  • 2 резистора на 10 кОм, мощностью на 1 ватт или меньше;
  • 2 резистора на 100 Ом, мощностью на 1 ватт или меньше;
  • 2 мосфет-транзистора с логическим уровнем IRLZ44NPBF;
  • 1 модуль микроконтроллера esp32

По набору компонентов, искушённый читатель сразу понял, что мы будем делать: с помощью esp32 мы будем управлять ключами на основе мосфет-транзисторов.


При использовании мосфет-транзистора нужно иметь в виду один нюанс: транзистор должен открыться полностью, если этого не произойдёт, то он в работе будет сильно греться и будет фактически, работать в роли резистора.

В данном конкретном случае, это, конечно, не так важно, так как мы будем коммутировать достаточно малые токи кнопки включения/выключения и reset-a.

Кстати, весьма рекомендую к прочтению хорошую статью про подбор мосфетов.

Конечно, можно не напрягаться и взять релейные модули для ардуино:


Но это не наш путь и вот почему: а) щелчки реле; б) наклёп контактов; в) высокое энергопотребление релейным модулем.

Оно нам надо? Нет, оно нам не надо :-)

Так как мы хотим сделать «всё красиво» — мы будем использовать специальные мосфеты с логическим уровнем.

В рамках данного проекта, я выбрал мосфет-транзистор IRLZ44NPBF. У него порог срабатывания от 2 Вольт. То, что надо.

Как собрать ключ на мосфете — можно почитать тут.

По поводу конкретных силовых исполнительных устройств более-менее всё понятно. Однако нам ведь нужно ещё и каким-то образом «рулить» esp32 внешнего интернета!

То есть, задача в общем виде представляется следующей: некий интерфейс из внешнего интернета, зная IP адрес esp32, может отдавать ей команды.

Однако, подключение к устройству, находящемуся в сети за роутером, может стать неудобством, ввиду, как минимум, смены IP адреса у управляемого устройства, после каждой перезагрузки.

Да, вы скажете, что IP на самом деле не меняется, он может поменяться, только если кто-нибудь из домашних тоже подключится к сети, в тот момент, пока esp32 перезагружается, и ей придётся взять другой свободный IP.

Как бы там ни было, но все эти частности не важны, так как данный вопрос можно решить намного проще, чем выяснять какой текущий IP у платы и каким образом его сообщить во внешний интернет: для этого мы будем использовать протокол mqtt. Для тех, кто не сталкивался, вкратце можно сказать, что протокол предназначен для интернета вещей, «умного» дома и не только.

Использование протокола позволяет с лёгкостью обойти проблему прохода за роутер (тут следует сделать оговорку, что мы делаем допущение, что большая часть пользователей интернета, которая выходит в сеть, используя персональные компьютеры, имеют дома wi-fi точку доступа в виде роутера).

❒ В нашем случае, использование протокола будет выглядеть следующим образом:

Значение отправляемых цифр:

0 — «выключить компьютер»;
1 — «включить компьютер»;
2 — «перезагрузить компьютер»;

Как работать с клиентом: при запуске указанного выше mqtt-клиента — мы видим вот это окно. Ничего в нём не меняем, жмём кнопочку «Connect»:



Вводим топик и жмём «Subscribe»:


Топик, на который мы подписались — появился справа, наверху:



То есть, для работы всей системы нужны:

  • компьютер с установленной в него сборкой на базе esp32;
  • точка доступа wifi (домашний роутер);
  • MQTT-брокер;
  • публичный MQTT-клиент (который мы запускаем на смартфоне).

И работает оно так (текст оттуда же):

Модифицируем её для нашего случая:


Прошивка проекта написана в Arduino IDE и доступна на моём гитхабе.

Пробежимся по основным моментам.


Вы можете использовать любой другой — это вопрос исключительно предпочтений. Я выбрал этот и он у меня заработал. А так как я обычно иду по пути наименьшего сопротивления (в рамках парадигмы «и так сойдёт!» ), то искать что-то иное не было смысла. Ибо любая минута поиска — воровала у меня время, которое я мог бы с пользой провести, лёжа на диване, с думами о вечном :-))).

Для начала мы в блоке изначальной инициализации переменных указываем порт для подключения к mqtt брокеру, при необходимости — имя пользователя и его пароль(или имя и пароль оставляем пустыми, если брокер публичный — как в нашем случае):


Далее мы указываем два топика, — один из которых для публикации статуса компьютера в данный момент (то есть компьютер включён/выключен, или перезагружается):


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

Из ещё одного интересного момента можно рассмотреть следующие три переменные:


В них мы задаем время в миллисекундах, в течение которого наше устройство будет держать нажатой соответствующую кнопку. Данные переменные вам нужно определить самостоятельно, опытным путём(если мои значения не будут работать)- для вашего конкретного компьютера, так как, вероятно, они могут отличаться в вашем конкретном случае. В прошивке значения переменных указаны для моего случая.

Ещё одним любопытным моментом, который некоторые могут не знать, является то, что встроенный в esp32 светодиод привязан к пину, под номером 2. Я решил, что «инженерия инженерией, но и красотень тоже должна быть». Поэтому наша esp-шка будет мигать встроенным светодиодом:


Теперь, что касается питания нашей сборки на esp32: единственный более-менее комфортный способ это осуществить,- запитать нашу сборку от дежурного питания компьютера. Так как наша сборка потребляет совсем немного, её подключение к дежурному питанию не должно вызвать проблемы с невозможностью включения компьютера из-за просадки напряжения.

А далее, когда компьютер включён — можно подключиться к нему, с помощью предварительно настроенных программ удалённого администрирования, удалённого рабочего стола и т.д. и т.п.

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

Спросите у гика, как решить проблему с вашим компьютером с Windows, и он, скорее всего, спросит: «Вы пытались перезагрузить его?». Это похоже на легкомысленный ответ, но перезагрузка компьютера может решить многие проблемы.

Как бы то ни было, у вас могут быть свои собственные причины для перезагрузки компьютера, в этой статье мы покажем вам, как перезагрузить его с помощью Python.

Требования

В противном случае вы получите следующую ошибку в вашем скрипте:

Чтобы установить pywin32 на ваши окна, перейдите в репозиторий сборки в Source Forge здесь. Выберите последнюю сборку в списке (до даты этой статьи 220), тогда будет показан список раздач: x86 или x64

Pywin32 исходные кузнечные дистрибутивы

Установите дистрибутив, который работает с вашей версией python и платформы Windows (x86 или x64).

Перезапуск

Возможно, вы нашли некоторые решения, использующие модуль os и выполняющие модуль системной оболочки, известную команду shutdown:

Однако для некоторых пользователей Windows это решение не работает правильно.

Чтобы предотвратить любую несовместимость, мы будем работать напрямую с win32api, что позволит нам достичь нашей цели.

Как указано в требованиях, на вашем компьютере должен быть установлен pywin32, чтобы избежать ошибок при выполнении.

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

2 основные функции будут RebootServer а также AbortReboot , AdjustPrivilege предоставит необходимые разрешения для перезагрузки системы. Обратите внимание, что RebootServer функция имеет время ожидания 30 секунд (компьютер будет перезагружен через 30 секунд), при необходимости измените его.

Чтобы перезагрузить компьютер (или сетевые компьютеры), используйте функцию RebootServer:

Перезагрузка диалоговых окон

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

  1. Перезапустите его через 30 секунд.
  2. Подождите 10 секунд.
  3. Прервите перезагрузку через 10 секунд.

Поскольку код говорит сам за себя, теперь продолжайте работать в своем проекте, получайте удовольствие!

Читайте также: