2014-12-22 12 views
12

Sto provando a mostrare l'elenco dei dispositivi connessi nel browser usando il pallone. Ho permesso pallone sulla porta 8000:"TypeError": l'oggetto 'list' non è una beuta calabile

in server.py:

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

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

in app.py:

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

E questa è la mia prova:

url = "http://127.0.0.1:8000" 

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

ma io continua a ricevere questo errore:

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

Sto facendo male sth nel controllare se ttyUSB, ... e altri dispositivi esistenti?

+2

Quale linea stanno producendo il errore? –

+0

manca il codice o perché hai importato richieste e serie in app.py? –

+0

Il browser restituisce "Errore interno del server". quando uso il comando "gunicorn server: server -b 0.0.0.0:8000" vedo l'errore.In app.py quando cambio il glob.glob ... per restituire "risultato del test" tutto funziona correttamente. – N45

risposta

22

Il problema è che il proprio endpoint restituisce un elenco. Flask ama solo determinati tipi di ritorno. I due che sono probabilmente i più comuni sono

  • un oggetto Response
  • un str (insieme a unicode in Python 2.x)

Si può anche restituire qualsiasi callable, come ad esempio una funzione .

Se si desidera restituire un elenco di dispositivi si dispone di un paio di opzioni. È possibile restituire la lista come una stringa

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

o se si vuole essere in grado di trattare ogni dispositivo come un valore distinto, è possibile restituire una risposta 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') 
+0

Grazie! funziona perfettamente. – N45

Problemi correlati