Как запустить консольную команду Ubuntu внутри Flask?
Написал тестовую функцию просмотра каталога:
def comand_ls_a():
MyOut = subprocess.Popen(['/home/APP_USER/APP_FOLDER', 'ls', '-a', '.'],
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
stdout, stderr = MyOut.communicate()
print(stdout)
print(stderr)
return 'REZULT:\n' + stdout + stderr
Вызвал ее в роутинге:
@MY_APP.route('/test_func', methods=['POST'])
def test_func():
return jsonify({'data': newd_dir_and_txt()})
В постмане ответ:
<!doctype html>
<html lang=en>
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or
there is an error in the application.</p>
На самом сервере ошибка:
PermissionError: [Errno 13] Permission denied: '/home/APP_USER/APP_FOLDER'
Да. понимаю, что в доступе отказано. Но как разрешить доступ? Или как-то по другому надо это делать?
ДОПОЛНЕНИЕ для ganz:
Если сделать так:
import os
def comand_ls_a():
result = os.system('com > out.txgt')
return 'REZULT:\n' + str(result)
то выводит:
{
"data": "REZULT:\n32512"
}
ДОПОЛНЕНИЕ #2: Покапался еще в инете и такое сделал:
def comand_ls_a():
proc1 = subprocess.run('ls -a', stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, shell=True, encoding='utf-8',
cwd=os.path.dirname(os.path.realpath(__file__)),)
proc2 = subprocess.run('id', stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, shell=True,
cwd=os.path.dirname(os.path.realpath(__file__)),
encoding='utf-8')
return {
'ls -a': proc1.stdout,
'id': proc2.stdout,
'inf': os.path.dirname(os.path.realpath(__file__))
}
Выводит:
{
"data": {
"id": "/bin/sh: 1: id: not found\n",
"inf": "/home/USER_FOLDER/APP_FOLDER/py_library",
"ls -a": "/bin/sh: 1: ls: not found\n"
}
}
Причем как то странно выводит. Выводит с предыдущим результатом субпроцесса...