2016-11-04 2 views
1

Я хотел бы написать скрипт python, который может импортировать все локальные переменные из существующего ядра ipython.Импортировать переменные из ядра ipython в скрипт python

Я взглянул на API ipython, но на самом деле не нашел то, что хочу.

Вот несколько более точные вопросы:

1 - Есть функция от IPython API, чтобы перечислить все существующие активные ядра IPython?

2 - Можно ли получить все переменные из ядра без запуска встроенного ipython?

EDIT: Идея заключается в том, чтобы сделать переменную Проводник для питона в текстовом режиме, который может отображать локальные/глобальные переменные в данном ядре в реальном времени

EDIT: Я написал следующий класс которые делают то, что я хочу. Однако, я думаю, что это не оптимально. В частности, 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

Чтобы найти все ядра, запущенные сервером ноутбука, посмотрите [этот код] (https://github.com/takluyver/nbmanager/blob/master/nbmanager /api.py). Например. 'для сервера в NbServer.findall(): print (server.sessions())'. Затем в ядре вы можете настроить что-то, прослушивающее 'post_run_cell' [event] (http://ipython.readthedocs.io/en/stable/config/callbacks.html), чтобы отправить переменные в ваш процесс. –

ответ

0

Я не могу с 1, но 2 может быть возможным с помощью модуля inspect см here. Я думаю, что вы собираетесь бороться, если хотите проверить ядро ​​из отдельного процесса, хотя ...

Смежные вопросы