在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请求)调用时,只会写入一个空文件