[英]Using %run in jupyter notebook without affecting interactive namespace
您不会从脚本返回任何内容或重置 var1 的值。 这个答案应该会有所帮助。 您需要在myscript.py
中编写一个返回所需值的函数,然后将其设置为var1
。
脚本文件
def this_awesome_function():
return 10
笔记本:
from myscript import this_awesome_function
var1 = this_awesome_function()
print(var1)
希望这应该有效!
我的一位同事给出了以下答案,这是迄今为止我找到的最好的答案:
import subprocess
var1 = 9
subprocess.Popen(["python3", "myscript.py"])
print(var1)
我不确定 jupyter notebook 是否允许您执行此操作。 它很可能使用%run
或%prun
但无法弄清楚。
目前不使用%run
(见底部); 但是,您不需要从笔记本内部运行 bash 脚本或调用subprocess
。 您可以使用以下命令将命令发送到单独的 shell 实例并运行脚本,而不会影响您的本地命名空间:
!python myscript.py
有关更多信息,请参阅此处的“IPython 中的 Shell 命令”和下面的部分。 Jupyter Python 笔记本建立在 IPython 能力之上。
正如我在这里建议的那样,通常您希望在 Jupyter 中使用功能更全面的%run
,因为它可以处理回传错误、 input
提示,并将脚本的输出更好地连接到一般的 Jupyter 笔记本。
所以你沿着最佳实践的路线思考得很好; 但是,您与笔记本中的变量重叠,您希望避免的脚本的主要部分可以使用!python myscript.py
轻松完成。 通常,当您使用函数更多地模块化脚本时, main
命名空间中实际上不会有太多内容。
我在这里看到的文字让您认为-p
选项应该按照您的想法执行:
在这种模式下,程序的变量不会传播回 IPython 交互式命名空间(因为它们保留在分析器执行它们的命名空间中)。
它似乎确实描述了您在说什么,而我无法解释为什么它没有。 我什至尝试了当前的 IPython 并且发生了同样的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.