2016-06-23 2 views
3

У меня возникли проблемы с этим.Печать на консоль Вне класса

У меня есть класс, который печатает консоль «внутри» класса. Я хочу иметь возможность печатать «снаружи» класса, чтобы я мог использовать поток данных для других вещей. Как я могу получить поток из кода ниже?

from ws4py.client.threadedclient import WebSocketClient 
import json 

class FooClient(WebSocketClient): 

    msg=0 

    def opened(self): 
     self.send(json.dumps({"One": "bah", "Two": "bah"})) 

    def closed(self, code, reason=None): 
     print "Closed down", code, reason 

    def received_message(self, m): 
     if len(m) == 175: 
      self.close(reason='Remote server closed socket') 
     msg = json.loads(str(m)) 
     #print msg 


ws = FooClient('wss://ws-feed.foobar.com', protocols=['http-only', 'chat']) 
ws.connect() 
ws.run_forever() 

Я попробовал несколько разных вещей, но еще не понял правильный путь для достижения этого. Концептуально хочу:

ws = FooClient('wss://ws-feed.foobar.com', protocols=['http-only', 'chat']) 
    ws.connect() 
    ws.run_forever() 
    print msg 

Но, очевидно, это не работает.

+1

Что? Похоже, вы просто хотите «вернуть» что-то из одного из ваших методов и распечатать его. Я не понимаю. –

ответ

2

Почему не печатать сообщения в received_message()? Как только вы позвоните run_forever(), он вернется только тогда, когда ваш клиент умрет (или отключается?). Вы должны обрабатывать события INSIDE цикла выполнения.

run_forever() --> 
    code handling web-sockets --> 
     event handlers <-- do it here 

Мне кажется, что то, что вы действительно хотите сделать здесь запустить этот код в контексте другого процесса/потока или исполнителя, так что вы можете продолжать выполнять другие действия.

Посмотрите: https://docs.python.org/3/library/concurrent.futures.html

+0

Я «думаю», это то, что я хочу. Поскольку данные передаются потоком json, я хочу иметь возможность манипулировать им, использовать его для запуска других действий и т. Д. OUTSIDE of received_message(). Я не совсем уверен, что я могу сделать с этим только для печати на консоль. В любом случае, «run_forever()» НЕ возвращает ничего, пока клиент не умрет, и теперь я понимаю, почему мои «возвратные» эксперименты не сработали. С другой стороны, ссылка, которую вы отправляете, может немного переместиться через мою голову ... Мне нужно будет прочитать. Я предполагаю, что нет простого решения, которое мне не хватает. – megrimm