Почему команда подпроцесса python получает [Errno 2] Нет такого файла или каталога: 'ls': 'ls' при выполнении через вызов API - PullRequest
1 голос
/ 10 февраля 2020

Я выполняю простую команду 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...