Страницы

Поиск по вопросам

среда, 5 февраля 2020 г.

Программная перезагрузка Linux c помощью Python

#python #linux #ubuntu


В одном из моих мелких скриптов потребовалось реализовать программную перезагрузку
компьютера под управлением Ubuntu. Не подскажите, как это проще всего сделать на Python?
Скрипт работает не под рутом!
    


Ответы

Ответ 1



На моей системе срабатывает: import subprocess subprocess.check_call('reboot') В отличии от Popen(), check_call() выбросит исключение, если reboot закончится неуспешно: к примеру, если другие пользователи активны —  чтобы обойти это, можно попробовать: subprocess.check_call(['systemctl', 'reboot', '-i']) Последнее может быть опасным так как может прервать деликатные операции, такие как прошивка CD/DVD (порча диска). Если у пользователя хватает прав, можно используя D-Bus API к systemd обратиться: #!/usr/bin/env python3 import pydbus # apt install python3-gi && pip install pydbus pydbus.SystemBus().get('.systemd1')['.Manager'].Reboot() Вот реализация systemctl в Питоне.

Ответ 2



Сделал, как мне рекомендовали: softreset = subprocess.Popen(['systemctl', 'reboot'])

Ответ 3



Как вариант можно сделать проще. vi /etc/sudoers Закоментировать # Defaults requiretty Добавляем в файл: user ALL= NOPASSWD: /usr/sbin/test.sh Даем права на ваш файл: ~ chown root:root /usr/your_directory/script.sh ~ chmod 755 /usr/your_directory/script.sh И фсе.

Комментариев нет:

Отправить комментарий