Разница между 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
Если ваш оригинальный код не работал, это также, вероятно, не будет работать.