Не удается получить вывод из Docker с помощью команды os.system в приложении фляги - PullRequest
0 голосов
/ 19 мая 2019

Колба с Nginx в Ubuntu 18.04

Я создаю веб-приложение, в котором мне нужно запустить некоторый код Python, предоставленный пользователями, и планирую использовать Docker для раскрутки временных контейнеров, чтобы запустить код, вернуть некоторые выходные данные и прокрутить контейнер вниз.

Мой код не записывает вывод в файл при вызове колбой.

Я успешно выполнил команду из SSH, а также написал тестовый скрипт на python (запускаемый в той же виртуальной среде, что и Flask), который записывает файл без проблем. Это происходит только при вызове через http-запрос.

@app.route("/", methods=['POST', 'GET'])
def runScript():
    ScriptSettings = Settings()

    if(request.method == 'POST'):
        key = request.form['key']
        if key == ScriptSettings.key:
            user = request.form['user']
            script = request.form['script']

            rand_str = str(random.randint(100000000, 1000000000))
            file_name = f"user-scripts/{user}-{rand_str}"
            script_file_name = file_name + ".py"
            response_file_name = file_name + ".txt"
            working_directory = "/home/USER/request-server"

            f=open(script_file_name, "w+")
            f.write(script)
            f.close()

            os.system(f'docker run -it --rm --name {user}-{rand_str} -v "$PWD":{working_directory} -w {working_directory} python:3.7-alpine python {script_file_name} > {response_file_name}')



            f=open(response_file_name, "r")
            contents = f.read()
            f.close()

            if remove_user_files:
                os.remove(script_file_name)
                os.remove(response_file_name)

            return contents
        else:
            return ""
    else:
        return ""

txt-файл (response_file_name) должен содержать вывод из кода / докера python. Он отлично работает при запуске из тестового скрипта или прямой командной строки, но просто записывает пустой файл при вызове в этом скрипте с помощью flask (запрос http)

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