Как запустить сценарий оболочки в веб-приложении azure при запущенном приложении django?
Я хочу запустить shell-скрипт на сервере хостинга azure при размещении проекта Django, мое представление Django содержит код модуля subprocess
для запуска shell-скрипта, но я не знаю, какой shell используется на моем сервере, bash или что-то еще, и я не могу запустить этот shell-скрипт. Как же мне запустить shell-скрипт на сервере хостинга azure или любом другом сервере хостинга?
Я пробовал использовать python
import subprocess
sp = subprocess.Popen(['echo $0'], stdout=subprocess.PIPE)
# or
sp = subprocess.Popen(['echo', '$0'], stdout=subprocess.PIPE)
# or
sp = subprocess.Popen(['echo $0'], stdout=subprocess.PIPE, shell=True)
# or
sp = sp = subprocess.Popen(['echo', '$0'], stdout=subprocess.PIPE, shell=True)
x=sp.communicate()
# send response to me or print(x)
чтобы узнать, какой bash используется на моем хостинг-сервере, но ничего не получил.
Как сказано в документации модуля subprocess
в subprocess_docs :
Аргумент shell (по умолчанию равен False) определяет, использовать ли оболочку в качестве программы для выполнения. Если shell равен True, рекомендуется передавать args в виде строки, а не последовательности. На POSIX с shell=True оболочкой по умолчанию будет /bin/sh. Если args - строка, то строка определяет команду для выполнения через оболочку. Это означает, что строка должна быть отформатирована точно так же, как она была бы набрана в приглашении оболочки. Это включает, например, кавычки или обратную косую черту в именах файлов с пробелами. Если args является последовательностью, то первый элемент определяет командную строку, а все последующие элементы будут рассматриваться как дополнительные аргументы для самого командного интерпретатора. Иными словами, Popen делает то же самое, что и: Popen(['/bin/sh', '-c', args[0], args1, ...])
Подводя итог, если вы решили использовать shell=True
, передавайте команду в виде строки.
Если shell=True
, то указанная команда будет выполнена через оболочку. Это может быть полезно, если вы используете Python в основном для расширенного потока управления, который он предлагает по сравнению с большинством системных оболочек, но при этом хотите иметь удобный доступ к другим возможностям оболочки, таким как shell pipes, подстановочные знаки имен файлов, расширение переменных окружения и расширение ~ до домашнего каталога пользователя.
Это также может быть полезно: Когда использовать Shell=True для модуля подпроцесса Python