Итак, я пытаюсь запустить процесс как суперпользователя из python script с помощью подпроцесса. В оболочке ipython что-то вроде
proc = subprocess.Popen('sudo apach2ctl restart',
shell=True, stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
работает нормально, но как только я вставляю его в script, я начинаю получать: sudo: apach2ctl: command not found
.
Я бы предположил, что это связано с тем, как sudo обрабатывает среды на ubuntu. (Я также пробовал sudo -E apche2ctl restart
и sudo env path=$PATH apache2ctl restart
безрезультатно)
Итак, мой вопрос в основном, если я хочу запустить apache2ctl restart
как суперпользователя, который запрашивает у пользователя пароль суперпользователя, когда это необходимо, как мне это сделать? Я не собираюсь хранить пароли в script.
Edit:
Я пробовал передавать команды как строку, так и обозначаемую в списке. В интерпретаторе python со строкой я получу правильную подсказку пароля (все еще не работает в python script, как в моей исходной проблеме), список просто дает экран справки для sudo.
Изменить 2:
Итак, я понимаю, что, хотя Popen будет работать с некоторыми командами так же, как строки, когда shell = True, требуется
proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])
без 'shell = True', чтобы заставить sudo работать.
Спасибо!