1
我想編寫一個python腳本,它可以從現有的ipython內核中導入所有本地變量。從ipython內核導入變量到python腳本
我看了一下ipython API,但沒有真正找到我想要的。
下面是一些更精確的問題:
1 - 是否有一個函數從IPython的API來列出所有現有的活動IPython的內核?
2 - 是否有可能從內核獲取所有變量而不啓動嵌入ipython?
編輯:這背後的想法是讓一個變量資源管理器在文本模式下蟒蛇,可以實時顯示在一個給定的核局部/全局變量
編輯:我寫了下面的類哪些是我想要的。但是,我認爲這不是最佳的。特別是,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)的變量來將變量發送到您的進程。 –