如何读取jupyter笔记本中的其他单元格

如何解决如何读取jupyter笔记本中的其他单元格

我正在尝试为 jupyter notebook 编写一个神奇的函数,它可以让我直接在 notebook 中看到 manim输出

为了实现这一点,我基本上将单元格的内容保存到临时 .py 文件中,然后使用临时 manimce 文件在子进程中调用 .py 命令并检查输出找到创建的视频/gif 的路径。

我的问题是,假设我在其他单元格(甚至导入语句)中声明了一些其他变量,并且我在调用我的魔术函数的单元格中使用它们。我怎样才能将这些变量(或基本上是代码)从同一个临时 .py 文件中的其他单元格保存,以便我不会出错?或者有什么其他方式可以实现?希望下面的屏幕截图能更好地解释我想问的问题。

jupyter-notebook-screenshot

这是我使用的代码

# manimce_magic.py
from IPython.core.display import display,HTML
from IPython.core.magic import Magics,magics_class,line_magic,cell_magic,line_cell_magic
from IPython.core.magic import needs_local_scope
from pathlib import Path
from subprocess import Popen,PIPE
from tempfile import NamedTemporaryFile
import IPython.display
import os
import re

def find_path(output_string):
    output_string = output_string.decode('utf-8')
    output_string = re.sub(' ','',''.join(output_string.split('\n')))
    if m := re.search('(?<=Filereadyat).+(?=INFO)',output_string):
        return m.group(0)

@magics_class
class ManimceMagic(Magics):
    @needs_local_scope
    @cell_magic
    def manimce(self,line,cell,**kwargs):
        manimce_args = line.split()
        f = NamedTemporaryFile('r+',suffix='.py',delete=False)
        try:
            f.write(cell)
            f.close()

            args = ['manimce',f.name,*manimce_args]
            p = Popen(args,stdout=PIPE,stdin=PIPE,stderr=PIPE)
            output,err = p.communicate()
            path = find_path(output)
            display(IPython.display.Code(output.decode('utf-8'),language='python3'))
            display(p.returncode)
        finally:
            os.remove(f.name)

        if path:
            path = Path(path)
            relative_path = path.relative_to(Path.cwd())

            if '-i' in manimce_args:
                return IPython.display.Image(relative_path,width=854,height=480)
            else:
                return IPython.display.Video(relative_path,height=480,html_attributes='controls loop autoplay')

def load_ipython_extension(ipython):
    ipython.register_magics(ManimceMagic)

解决方法

我无法回答您的具体问题,但也许这会有所帮助。我相信当前版本的 manim 已经带有 manim 魔法命令。我已经试过了,它似乎工作正常。我让它工作,我首先运行 import jupyter_manim,然后在一个新单元格中,我编写我的程序,从魔术命令 %%manim TestClass -p -ql 开始,其中 TestClass 是我的动画名称正在建设。 Manim 输出显示在 Jupyter 笔记本中。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?