Я выполняю простую команду subprocess
, вызывая API, разработанный с Flask, который предоставляется с помощью Gunicorn, и независимо от того, что это за команда, я получаю сообщение об ошибке: [Errno 2] No such file or directory:
Пример кода
from .. import app
from flask import request, jsonify
import logging
import subprocess
from datetime import datetime
from subprocess import Popen, PIPE
from subprocess import check_output
def get_shell_script_output_using_communicate():
session = subprocess.Popen('ls', stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()
if stderr:
raise Exception("Error "+str(stderr))
return stdout.decode('utf-8')
@app.route("/api/start_command", methods=['POST'])
def start_command():
logging.basicConfig(filename='/home/import.log', level=logging.INFO)
out = get_shell_script_output_using_communicate()
logging.info("{} {} {} ".format(datetime.now(), "command finished", out))
Хотя, конечно, ожидаемый результат будет записывать результат команды ls
.
Я могу без проблем запустить ту же команду в (позвольте мне сказать) не веб-сервис режим. Я также пробовал все разные версии вызовов подпроцесса с shell=True
и без него. Что я делаю неправильно? Можно ли запустить подпроцесс в программе gunicorn- flask?