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()에 전화하면 클라이언트가 사망하거나 연결이 끊어 질 때만 되돌아옵니다. 실행 루프 내부에서 이벤트를 처리해야합니다.

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

당신이 정말 다른 프로세스/스레드 또는 집행의 맥락에서이 코드를 실행 여기에하고 싶은, 그래서 당신이 다른 작업을 계속 수행 할 수있는 날 것으로 보인다.

살펴보기 : https://docs.python.org/3/library/concurrent.futures.html

+0

나는 이것이 내가 원하는 것이라고 생각한다. 데이터가 json으로 스트리밍 중이기 때문에이를 조작하고 다른 동작을 트리거하는 데 사용할 수 있기를 원합니다. 'received_message()'의 바깥 쪽. 콘솔에 인쇄하는 것만으로 나는 무엇을 할 수 있는지 잘 모르겠습니다. 어쨌든 'run_forever()'는 클라이언트가 죽을 때까지 아무것도 리턴하지 못하고, 이제는 'return'실험이 작동하지 않는 이유를 이해합니다. 다른 한편으로는 당신이 보내는 링크가 제 머리 위로 조금 갈 수도 있습니다 ... 나는 읽어야 할 것입니다. 지금 내가 놓치고있는 간단한 해결책이 없다고 가정하고 있습니다. – megrimm