Колба с 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)