无法使用从Docker获取输出操作系统Flask应用程序中的命令

2024-04-18 12:57:58 发布

您现在位置:Python中文网/ 问答频道 /正文

ubuntu18.04上的Nginx烧瓶

我正在构建一个web应用程序,需要在其中运行用户提供的一些Python代码,并计划使用Docker启动临时容器来运行代码、返回一些输出并关闭容器。你知道吗

当flask调用时,我的代码不会将输出写入文件。你知道吗

我已经成功地从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\u file\u name)应该包含python代码/docker的输出。当从测试脚本或直接命令行运行时,它可以很好地工作,但是在这个脚本中使用flask(http请求)调用时,它只会写入一个空文件


Tags: 文件key代码nameform脚本ifresponse