Надеюсь, это поможет.

му я пытаюсь заставить процесс запускаться как суперпользователь из скрипта Python, используя подпроцесс. В оболочке ipython что-то вроде

proc = subprocess.Popen('sudo apach2ctl restart',
                        shell=True, stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE)

работает нормально, но как только я вставляю его в скрипт, я начинаю получать:sudo: apach2ctl: command not found.

Я предполагаю, что это связано с тем, как sudo обрабатывает окружение в Ubuntu. (Я тоже пробовалsudo -E apche2ctl restart а такжеsudo env path=$PATH apache2ctl restart безрезультатно)

Так что мой вопрос в основном, если я хочу бежатьapache2ctl restart как суперпользователь, который запрашивает пароль суперпользователя при необходимости, как мне это сделать? Я не собираюсь хранить пароли в скрипте.

Редактировать:

Я попытался передать команды как строку и как токен в список. В интерпретаторе python со строкой я получу запрос пароля правильно (все еще не работает в сценарии python, как в моей первоначальной задаче), список просто отображает экран справки для sudo.

Изменить 2:

Итак, я понял, что хотя Popen будет работать с некоторыми командами в виде строк, когда shell = True, он требует

proc = subprocess.Popen(['sudo','/usr/sbin/apache2ctl','restart'])

без 'shell = True', чтобы заставить sudo работать.

Спасибо!

Ответы на вопрос(5)

Ваш ответ на вопрос