我正在按照本教程进行电磁场求解器(https://mpb.readthedocs.io/en/latest/Python_Data_Analysis_Tutorial/) 我在 python 上运行它,使用 jupyter 笔记本,因为它更容易调试且方便。 现在有什么方法可以运行以下命令
unix% python mpb_tri_rods.py >& tri-rods.out
当我在 jupyter 笔记本中时?将结果保存为 .out 文件并进一步处理它们?
注意:我也为此使用 wsl
将该命令转换为 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
将向您展示笔记本内的全部内容。