2017-09-23 4 views
0

mon code:canaux django ne peuvent pas les journaux de sortie en temps réel

def ws_receive(message): 
    text = message.content['text'] 
    request = json.loads(text) 
    cmd = request['cmd']  

    results = run(cmd) 
    print(cmd) 
    for result in results: 
     Group(GROUP_NAME).send({'text':result.decode('utf-8')}) 
     print(result) 

cmd est comme ping -c 4 www.google.com;

résultats du terminal est:

[2017/09/24 07:24:44] WebSocket HANDSHAKING/[127.0.0.1:59285] 
[2017/09/24 07:24:44] WebSocket CONNECT/[127.0.0.1:59285] 
[2017/09/24 07:24:44] HTTP GET /api/hosts/?status=used 200 [0.07, 127.0.0.1:59247] 
ping -c 4 www.google.com 
2017-09-24 07:24:58.512885 b'PING www.google.com (74.125.23.103): 56 data bytes\n' 
2017-09-24 07:24:58.513127 b'64 bytes from 74.125.23.103: icmp_seq=0 ttl=45 time=138.542 ms\n' 
2017-09-24 07:24:59.517881 b'64 bytes from 74.125.23.103: icmp_seq=1 ttl=45 time=142.954 ms\n' 
2017-09-24 07:25:00.522698 b'64 bytes from 74.125.23.103: icmp_seq=2 ttl=45 time=144.568 ms\n' 
2017-09-24 07:25:01.562285 b'64 bytes from 74.125.23.103: icmp_seq=3 ttl=45 time=180.163 ms\n' 
2017-09-24 07:25:01.562400 b'\n' 
2017-09-24 07:25:01.562459 b'--- www.google.com ping statistics ---\n' 
2017-09-24 07:25:01.562517 b'4 packets transmitted, 4 packets received, 0.0% packet loss\n' 
2017-09-24 07:25:01.562586 b'round-trip min/avg/max/stddev = 138.542/151.557/180.163/16.662 ms\n' 

mais, les informations de débogage websocket du navigateur est: browser ws debug

donc, I'am que les canaux est d'exécuter la commande jusqu'à la fin a envoyé le message, mais je veux envoyer le message en temps réel.

+0

Je veux imprimer les journaux en temps réel dans le navigateur, utilisez 'ping' ou' tail -f' –

Répondre

0

Essayez d'envoyer immédiatement:

Group(GROUP_NAME).send({'text':result.decode('utf-8')}, immediately=True) 

La raison derrière cela est que vous êtes dans la fonction de consommation WebSocket. Tant que vous êtes à l'intérieur, les appels Group.send ne sont pas exécutés, mais seulement collectés et exécutés par lots une fois que vous quittez la fonction. L'utilisation de immediately=True remplace ce comportement.