В настоящее время я работаю в удаленной среде, в которой есть пользователь с определенными правами sudo, для которого не требуется вводить пароль.
В частности, он может выполнять некоторые команды nginx без пароля, поэтомупока все хорошо.Проблема, с которой я сталкиваюсь, возникает, когда у меня есть скрипт на python, который заботится о проверке обновлений и, если есть изменения, пытается перезагрузить nginx.Как показано ниже
Popen(['sudo', 'nginx', '-T'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
call(["sudo", "systemctl", "reload", "nginx.service"])
Когда сценарий достигает одного из этих шагов, в терминале появляется запрос на ввод пароля, который не требуется, поскольку пользователь, выполняющий сценарий, имеет разрешения на запуск команд.без ввода.
Вопрос: Может быть, есть способ, без жесткого кодирования пароля в переменной, сказать сценарию «наследовать» разрешения пользователя при его запуске?
Некоторая дополнительная информация:
- Если сам скрипт вызывается с помощью sudo, все работает, но, к сожалению, это не вариант, и sudo следует использовать только для тех частей, которые в нем полностью нуждаются (перезагрузка nginx)
- Python версия 3.5
РЕДАКТИРОВАТЬ: Решено это благодаря другу:
Решением было добавить параметр PopShell = True в Popen.
Popen('sudo nginx -T'], shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)