Как использовать subprocess.call для перезапуска службы в Linux? - PullRequest
0 голосов
/ 09 января 2019

Я не очень хорошо разбираюсь в python и linux. Я хочу перезапустить nginx, используя subprocess.call. Я использую

subprocess.call("sudo systemctl restart nginx",shell=True)

Однако при использовании shell=True команда ничего не делала, в то время как я использую команду shell=False «Нет директорий или файлов». Я реализовал subprocess.call в кнопке.

1 Ответ

0 голосов
/ 09 января 2019

Разница между shell=True и shell=False в Unix-подобных системах заключается в том, что оболочка заботится о разбиении командной строки для exec, тогда как если у вас нет оболочки, вам придется это сделать сами.

Оболочка здесь не дает никаких преимуществ, так что вы можете спокойно ее бросить.

subprocess.call(["sudo", "systemctl", "restart", "nginx"])

Так что в общем случае все, что выглядит как

subprocess.something("blah 'blah' \"blah\"", shell=True)

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

subprocess.something(['blah', 'blah', "blah"])

и, конечно же, все, что относится к оболочке (перенаправление, конвейеры, глобализация и т. Д.), Необходимо заменить собственным кодом Python.

Подробнее в Фактическое значение 'shell = True' в подпроцессе и Запуск команд Bash в Python

Если ваш оригинальный код не работал, это также, вероятно, не будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...