#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 И фсе.
Комментариев нет:
Отправить комментарий