将变量从ipython内核导入python脚本

时间:2016-11-04 10:03:25

标签: python ipython

我想编写一个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()

1 个答案:

答案 0 :(得分:0)

我无法帮助1,但使用inspect模块可能有2个,请参阅here。如果你想从一个单独的进程中检查一个内核,我认为你会挣扎......