无法在烧瓶应用程序中使用os.system命令从Docker获取输出

时间:2019-05-19 13:45:51

标签: python docker flask

在Ubuntu 18.04上带有Nginx的烧瓶

我正在构建一个Web应用程序,在该应用程序中,我需要运行用户提供的一些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代码/ docker的输出。从测试脚本或直接命令行运行时,它可以完美运行,但在此脚本中使用flask(http请求)调用时,只会写入一个空文件

0 个答案:

没有答案