У меня есть некоторые облачные функции Google, которые я хотел бы развернуть из сценария python с помощью команды os.subprocess.run.Я могу успешно создать оператор, который затем можно скопировать и вставить в мой терминал Windows, чтобы развернуть функцию (и), которая выглядит примерно так:
gcloud functions deploy <cloud_function_name> --runtime python37 --trigger-http --entry-point <function_in_main_to_call> --project <project_id> --timeout 540 --source "C:\\Path\\to\\code base with spaces\\project_dir"
Обратите внимание, что в приведенной выше команде есть пробелы в пути клокальный каталог, где находится код.
Я знаю, что subprocess.run принимает список аргументов, первым из которых является команда, которая должна быть выполнена.Вот код, который я использую, чтобы превратить указанную выше команду (которая работает в терминале) в список аргументов для subprocess.run:
deploys = [
('gcloud functions deploy <cloud_function_name> --runtime python37 '
'--trigger-http --entry-point <function_in_main_to_call> '
'--project {} --timeout 540 '
'--source "{}"'.format(PROJECT_ID, 'C:\\Path\\to\\code base with spaces\\project_dir')),
]
for d in deploys:
beg, source = d.rsplit(' --source ', 1)
args = beg.split(' ') + ['--source'] + [source.replace('"', '\"')]
subprocess.run(args=args)
Дополнительная манипуляция со списком / строкой в переменной args была попыткойустранить ошибку.Когда выше вызывается subprocess.run, я получаю следующую трассировку:
Traceback (most recent call last):
File "<input>", line 9, in <module>
File "C:\miniconda3\envs\myenv\lib\subprocess.py", line 403, in run
with Popen(*popenargs, **kwargs) as process:
File "C:\miniconda3\envs\myenv\lib\subprocess.py", line 707, in __init__
restore_signals, start_new_session)
File "C:\miniconda3\envs\myenv\lib\subprocess.py", line 990, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Я проверил, что путь / файл существует.Я предполагаю, что это связано с форматированием строки пути --source
, но я пока не нашел решения.Как я могу развернуть облачные функции Google из этого скрипта python?