#python #python-3.x #subprocess #azure-functions
#python #python-3.x #подпроцесс #azure-функции
Вопрос:
Когда я запускаю этот подпроцесс локально, он работает, однако, когда я развертываю его в функции Azure, он возвращает
(2, «Нет такого файла или каталога»)
subprocess.run(['ssh', f'{user}@{host}', cmd],
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
check=True)
Стек ошибок из azure:
Exception while executing function: Functions.AxesSearchApi Result: Failure
Exception: FileNotFoundError: [Errno 2] No such file or directory: 'ssh'
Stack: File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py", line 347, in _handle__invocation_request
call_result = await self._loop.run_in_executor(
File "/usr/local/lib/python3.8/concurrent/futures/thread.py", line 57, in run
result = self.fn(*self.args, **self.kwargs)
File "/azure-functions-host/workers/python/3.8/LINUX/X64/azure_functions_worker/dispatcher.py", line 511, in __run_sync_func
return func(**params)
File "/home/site/wwwroot/AxesSearchApi/__init__.py", line 29, in main
sshProcess = subprocess.run(["ssh", f'{user}@{host}', cmd],
File "/usr/local/lib/python3.8/subprocess.py", line 489, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/local/lib/python3.8/subprocess.py", line 854, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "/usr/local/lib/python3.8/subprocess.py", line 1702, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
Комментарии:
1. Вероятно, он не может найти
ssh
команду…2. Возможно, он не может найти локальный ssh или, возможно, вы видите ошибку с удаленного хоста, которую он не может найти
cmd
. Вы можете запустить[
какой,
ssh]
, чтобы узнать о первом. И, возможно['ssh', f'{user}@{host}', 'which', cmd]
, для последнего. Было ли сообщение большего размера, которое вы урезали для нас? Было бы неплохо посмотреть, было ли это локальным исключением python или чем-то удаленным.3. Мне удалось перехватить это исключение только из python, azure вернул другой стек, но не связанный. я собираюсь добавить больше протоколирования
Ответ №1:
рабочие функции Azure намеренно тонкие, обычно в образе, на котором они развертываются, отсутствуют какие-либо второстепенные инструменты
похоже, что изображение python 3 не содержит ssh
двоичного файла
вероятно, вы можете создать пользовательский образ на основе docker вместо использования готовых изображений и установить ssh
в него