Как запустить сценарий оболочки в веб-приложении 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

Вернуться на верх