将变量从ipython内核导入python脚本
我想编写一个python脚本,它可以从现有的ipython内核导入所有局部变量 我查看了iPythonAPI,但并没有真正找到我想要的 这里有几个更精确的问题: 1-ipython API中是否有列出所有现有活动ipython内核的函数 2-是否可以在不启动嵌入式ipython的情况下从内核获取所有变量 编辑:这背后的想法是在文本模式下为python创建一个变量浏览器,可以实时显示给定内核中的本地/全局变量 编辑:我编写了下面的类,这些类可以实现我想要的功能。然而,我认为这不是最优的。特别是,将变量从ipython内核导入python脚本,python,ipython,Python,Ipython,我想编写一个python脚本,它可以从现有的ipython内核导入所有局部变量 我查看了iPythonAPI,但并没有真正找到我想要的 这里有几个更精确的问题: 1-ipython API中是否有列出所有现有活动ipython内核的函数 2-是否可以在不启动嵌入式ipython的情况下从内核获取所有变量 编辑:这背后的想法是在文本模式下为python创建一个变量浏览器,可以实时显示给定内核中的本地/全局变量 编辑:我编写了下面的类,这些类可以实现我想要的功能。然而,我认为这不是最优的。特别是,g
get\u iopub\u 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()
我无法帮助您选择1,但使用
inspect
模块可能会选择2,请参阅。我想如果你想从一个单独的进程中检查一个内核,你会很困难,但是…你能把感兴趣的变量保存到文件中吗?例如,使用cPickle
,然后将它们加载到脚本中?我编辑了我的文章。事实上,我希望我的脚本实时显示变量,以查找笔记本服务器启动的所有内核,请查看。例如,NbServer.findall()中服务器的:打印(server.sessions())
。然后在内核中,您可以设置一些内容,监听post\u run\u单元
,将变量发送到您的进程。