我实验室中的一些用户已经习惯了Matlab的工作区,并从ipython笔记本开始。所以,我尝试使用ipython小部件模拟工作区。在ipython.py中,有一个工作区类。我曾尝试将它用作工作空间(get_ipython()),但该类无法从脚本访问ipython变量。如果我在笔记本中定义这个类,它可以工作但不能从脚本中工作。
所以我放了一个main,我用exec()执行文件,然后显示工作区对象:
path = '/home/download/'
file = 'ipython.py'
exec(open(path+file).read())
wksp
executiong方法有效,但它真的很难看。有人知道如何让它变得更好吗?
答案 0 :(得分:0)
你应该使用
execfile()
不要使用exec()
示例:
execfile('/Home/Downloads/lel.py')
或为你:
path = '/home/download/'
file = 'ipython.py'
execfile(path+file)
并在您的ipython.py中,使用
if not __name__ == '__main__':
# Call you object
问候!!
答案 1 :(得分:0)
我可能会遗漏一些东西,因为我不明白为什么要将其作为脚本运行。我只需删除if __name__ == '__main__
,然后从笔记本中的模块导入wksp
。
from ipython import wksp
display(wksp)
正如评论中所解释的那样,当前代码在笔记本中定义的名称上调用eval()
,这不起作用,因为这些名称未在调用eval()
的范围内定义。但是你可以避免eval()
:
names = namespace.who_ls()
values = [namespace.shell.user_ns[name] for name in names]
types = [type(v) for v in varlist]