Я хотел бы написать скрипт 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()
Можете ли вы сохранить переменные, представляющие интерес для файла, вместо этого? Например, используя 'cPickle', а затем загрузите их в скрипт? –
Я отредактировал мое сообщение. На самом деле я хочу, чтобы мой скрипт отображал переменные в реальном времени –
Чтобы найти все ядра, запущенные сервером ноутбука, посмотрите [этот код] (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), чтобы отправить переменные в ваш процесс. –