2016-11-04 4 views
1

기존 ipython 커널에서 모든 로컬 변수를 가져올 수있는 파이썬 스크립트를 작성하고 싶습니다.ipython 커널에서 파이썬 스크립트로 변수 가져 오기

ipython API를 살펴 보았지만 실제로 원하는 것을 찾지 못했습니다. 여기

몇 가지 더 정확한 질문은 다음과 같습니다

1 - 함수가 기존의 모든 활성 ipython 커널을 나열 할 ipython의 API에서 있습니까?

2 - embed ipython을 시작하지 않고 커널에서 모든 변수를 가져올 수 있습니까?

편집 :이 뒤에 아이디어는 실시간으로 주어진 커널 로컬/글로벌 변수를 표시 할 수 텍스트 모드에서 파이썬의 변수 탐색기를 확인하는 것입니다 편집

: 나는 다음과 같은 클래스를 썼다 나는 원하는 것을 해낸다. 그러나 나는 그것이 최적이 아니라고 생각한다. 특히 get_iopub_message은 매우 지루합니다. 실제로, 그것은 모든 메시지 (심지어 유휴 및 '바쁜')를 얻지 만, who 출력에 액세스하는 더 직접적인 방법을 찾지 못했습니다.

class Watcher(Thread): 
    def __init__(self, km, delay): 
     Thread.__init__(self) 
     self.km = km 
     self.delay = delay 
     self.msg, self.variables = self.InitWhos() 

    def run(self): 
     ''' Main loop ''' 
     while True: 
      try: 
       data = self.km.get_iopub_msg(timeout=0.1) 
       self.msg = 1 
      except Empty: 
       pass 
      else: 
       try: 
        if data['content']['execution_state'] == 'idle' and self.msg == 1: 
         self.msg, self.variables = self.Whos() 
       except KeyError: 
        pass 

      sleep(self.delay) 

    def Whos(self): 
     ''' Execute whos in the kernel and get output ''' 
     self.km.shell_channel.execute('whos', store_history=None) 
     while self.msg == 1: 
      try : 
       data = self.km.get_iopub_msg(timeout=0.1) 
       self.variables = data['content']['data'] 
      except KeyError: 
       pass 
      else: 
       data = self.km.get_iopub_msg(timeout=0.1) 
       self.msg = 0 
     return self.msg, self.variables 

    def InitWhos(self): 
     ''' Init variables on startup ''' 
     self.msg = 1 
     return self.Whos() 
+0

관심 변수를 파일에 대신 저장할 수 있습니까? 예를 들어,'cPickle'을 사용하고, 스크립트에 이것을 적재 하시겠습니까? –

+0

내 게시물을 편집했습니다. 실제로 스크립트에 실시간으로 변수를 표시하고 싶습니다. –

+1

노트북 서버에서 시작한 모든 커널을 찾으려면 [this code] (https://github.com/takluyver/nbmanager/blob/master/nbmanager)를보십시오. /api.py). 예 : 'for NbServer.findall() : print (server.sessions())'를 호출합니다. 그런 다음 커널에서'post_run_cell' [event] (http://ipython.readthedocs.io/en/stable/config/callbacks.html)을 듣고 뭔가를 설정하여 프로세스에 변수를 보낼 수 있습니다. –

답변

0

나는 1 도움이되지 수 있지만, here 2 참조는 inspect 모듈을 사용 할 수 있습니다. 비록 당신이 별도의 프로세스에서 커널을 검사하고 싶다면 투쟁 할 것이라고 생각합니다 ...

관련 문제