Как решить проблему с правами доступа к файлу с подпроцессом в Cloud Functions? - PullRequest
1 голос
/ 24 февраля 2020

Я пытаюсь запустить двоичный файл с использованием подпроцесса в облачной функции Google на основе этого примера из https://github.com/zdenulo/google-cloud-functions-system-packages/tree/master/cf_ascii:

import os
import subprocess
import logging

from flask import make_response

def main(request):
    text = request.args.get('text', '')
    if not text:
        return 'missing text parameter', 404
    logging.info(f'received url: {text}')

    cmd = f"./figlet -d fonts {text}".split(' ')
    p = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
    stdout, stderr = p.communicate()
    error = stderr.decode('utf8')
    if error:
        return error, 403
    out = stdout.decode('utf8')
    response = make_response(out)
    response.headers["content-type"] = "text/plain"
    return response

Из того, что я прочитал, это должно быть возможно, но я получаю эту ошибку при выполнении:

...
File "/opt/python3.7/lib/python3.7/subprocess.py", line 1522, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
PermissionError: [Errno 13] Permission denied: './figlet'

Таким образом, похоже, что функции не хватает правильных разрешений, но я не могу понять, почему (настройки разрешений файлов, разрешения IAM / учетной записи службы ...) , Что мне здесь не хватает?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Вам необходимо создать путь к файлу относительно того, где находится ваш исходный файл, а не относительно того, откуда файл выполняется. Когда ваша функция вызывается в облачных функциях, они не совпадают.

Попробуйте следующее:

import os
this_dir, this_filename = os.path.split(__file__)
path_to_figlet = os.path.join(this_dir, 'figlet')
cmd = [path_to_figlet, '-d', 'fonts', text]
0 голосов
/ 24 февраля 2020

Ошибка подсказывает мне, что ./figlet не имеет установленного исполняемого бита. Перед развертыванием убедитесь, что это так:

chmod a+x figlet

Если вы развертываете с windows, у вас может не быть другого выбора, кроме как получить машину linux или macos для развертывания с .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...