将 jupyter 笔记本代码的输出保存为“xyz.out”文件(使用 MEEP)

问题描述 投票:0回答:1

我正在按照本教程进行电磁场求解器(https://mpb.readthedocs.io/en/latest/Python_Data_Analysis_Tutorial/) 我在 python 上运行它,使用 jupyter 笔记本,因为它更容易调试且方便。 现在有什么方法可以运行以下命令

unix% python mpb_tri_rods.py >& tri-rods.out
当我在 jupyter 笔记本中时?将结果保存为 .out 文件并进一步处理它们? 注意:我也为此使用 wsl

jupyter-notebook ipython windows-subsystem-for-linux meep
1个回答
0
投票

将该命令转换为 IPython 和 Jupyter 使用的最直接方法是在笔记本中执行

!python mpb_tri_rods.py >& tri-rods.out
。该感叹号向 IPython/Jupyter 发出信号,要求其获取命令后的所有内容并在临时 shell 实例中运行它。

我还应该补充一点,您希望将使用

!python
调用的脚本与笔记本一起放在同一目录中。您也可以使用路径,但将其放在旁边是最简单的。

但这并不是在正在运行的 Jupyter Notebook 中正常运行 Python 脚本的方式。有一种更以 IPython/Jupyter 为中心、功能丰富的方式经常被使用。

我可以轻松地部分说明这是什么。尝试运行

!python mpb_quad_rods.py >& tri-rods.out
,而不是上面的命令。 Jupyter 似乎表明已运行并已完成,类似于在单元格中运行
2 + 2
时看到的情况。您会在单元格旁边看到一个数字,指示该单元格作为本次笔记本运行中的第 n 个单元格完成,其中
n
是您运行此命令的序列中的任何数字。在笔记本中,您不会看到任何错误,就像运行
pint("test")
时看到的那样。但是,如果您在笔记本中的新单元格中输入
cat tri-rods.out
,则在运行
python: can't open file '/home/jovyan/mpb_quad_rods.py': [Errno 2] No such file or directory
后,您应该会看到类似
!python mpb_quad_rods.py >& tri-rods.out
的内容。但在这里必须执行额外的
cat
步骤并不是非常具有交互性,而 IPython/Jupyter 被设计为具有交互性。

因此,通常要在 IPython/Jupyter 中运行脚本,您可以利用

%run
魔术命令,并执行类似
%run my_script.py
的操作,如果有输出或错误,它将显示在笔记本。
%run
魔法有额外的选项和标志,您可以使用我引用的文档中讨论的内容。但在 Jupyter 中,它的功能比所涵盖的还要丰富。例如,stderr 通道以粉色表示得更好,您甚至可以使用
%run notebook.ipynb
在当前笔记本内运行整个单独的笔记本。
(旁白:与
%run
一起使用的最好的标志之一是
interactive
标志,
-i
。想象一下,在你的笔记本中,你在一个单元格中有代码将变量
a
设置为
5
并且你'如果您有一个名为
print(a)
的脚本并使用
%run myscript.py
运行它,您会收到名称错误,因为默认情况下它会关闭该脚本,但如果您使用
 运行该脚本。 %run -i myscript.py
,它会起作用,因为它以交互方式运行,就像在当前笔记本命名空间中运行一样。) 在你的情况下,它会是这样的,
%run mpb_tri_rods.py
一分钟后还有更多内容

如果您知道在哪里查看,那么您所询问的有关使用 Jupyter 运行 Python 脚本和控制 stdout 和 stderr 重定向的很多内容已经在 StackOverflow 上介绍了,例如 here(以及那里的其他几个答案)和 。 ...更多即将到来

“对它们进行进一步的工作”...

您添加了“并对它们进行进一步的工作”这句话。这超出了您在标题中提出的要求,通常 StackOveflow 上会要求您将每篇文章限制为一个问题。但我会添加一些提示,因为命令行与 Jupyter 以及当您处理预计没有交互式会话的内容时可互换地使用它们,一开始导航可能会有点棘手...

您可以通过多种方式在 Jupyter 中查看生成的

.out
。如果您只需要查看开头或结尾来确定是否已制作,则可以分别执行
!head tri-rods.out
!tail tri-rods.out
!cat tri-rods.out
将向您展示笔记本内的全部内容。

© www.soinside.com 2019 - 2024. All rights reserved.