我想编写一个python脚本,可以从现有的ipython内核导入所有局部变量。
我看了一下ipython API,但没找到我想要的东西。
以下是几个更精确的问题:
1 - ipython API中是否有一个函数列出所有现有的活动ipython内核?
2 - 是否可以在不启动嵌入式ipython的情况下从内核中获取所有变量?
编辑:这背后的想法是在文本模式下为python创建一个变量资源管理器,可以实时显示给定内核中的本地/全局变量
编辑:我写了下面的课,它可以做我想要的。但是,我认为这不是最佳选择。特别是get_iopub_message
非常无聊。实际上,它可以获取所有消息(甚至是空闲'以及#39;)但是我没有找到更直接的方法来访问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()