Подтвердить что ты не робот

"TypeError": объект "list" не является вызываемой колбой

Я пытаюсь показать список подключенных устройств в браузере, используя флягу. Я включил колбу на порт 8000:

в server.py:

@server.route('/devices',methods = ['GET'])
def status(): 
    return app.stat()

if __name__ == '__main__':
        app.run()

в app.py:

def stat():
    return(glob.glob("/dev/tty57") + glob.glob("/dev/tty9"))

И это мой тест:

url = "http://127.0.0.1:8000"

response = requests.get(url + "").text
print response

но я продолжаю получать эту ошибку:

"TypeError": 'list' object is not callable.

Я не ошибаюсь, проверяя, существуют ли ttyUSB,... и другие устройства?

4b9b3361

Ответ 1

Проблема заключается в том, что конечная точка возвращает список. Flask только любит определенные типы возврата. Наиболее вероятными из них являются

  • a Response объект
  • a str (вместе с unicode в Python 2.x)

Вы также можете вернуть любые вызываемые вызовы, такие как функция.

Если вы хотите вернуть список устройств, у вас есть несколько вариантов. Вы можете вернуть список в виде строки

@server.route('/devices')
def status():
    return ','.join(app.statusOfDevices())

или если вы хотите иметь возможность рассматривать каждое устройство как отдельное значение, вы можете вернуть ответ JSON

from flask.json import jsonify

@server.route('/devices')
def status():
    return jsonify({'devices': app.statusOfDevices()})
    # an alternative with a complete Response object
    # return flask.Response(jsonify({'devices': app.statusOfDevices()}), mimetype='application/json')