Функция gcloud развертывается с помощью os.subprocess: [WinError 2] Системе не удается найти указанный файл - PullRequest
0 голосов
/ 24 сентября 2019

У меня есть некоторые облачные функции 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?

...