python - 关于 Jupyter 中 Python 解释器的“非线性”行为的问题
问题描述
我正在通过 ssh 在 linux 机器上远程运行以下代码,并在与通过浏览器访问的 Jupyter notebook 相同的 linux 机器上运行以下代码。
import cv2
import pdf2image
def minimalFun(pdf_filepath, make_me_suffer = False):
print("Now I start.")
images = pdf2image.convert_from_path(pdf_filepath)
print("Pdf read.")
if make_me_suffer:
cv2.namedWindow('test',0)
print("I finished!")
minimalFun('Test.pdf', make_me_suffer = True)
我对 Jupyter 中 Pyhton 解释器的行为差异以及在命令行上使用时的行为感到困惑。
在 Jupyter 笔记本中
通过make_me_suffer = False
设置,代码将只打印
Now I start.
Pdf read.
I finished!
特别意味着该功能pdf2image.convert_from_path
成功运行。但是,make_me_suffer
设置为True
时,代码将仅打印
Now I start.
然后报告内核已经死了,将重新启动。特别是,内核已经与 function 一起死掉了pdf2image.convert_from_path
。
在命令行上
正如预期的那样,通过make_me_suffer = False
设置代码将只打印
Now I start.
Pdf read.
I finished!
但是现在当标志设置为 时make_me_suffer = True
,我们得到
Now I start.
Pdf read.
: cannot connect to X server
意味着这里的功能pdf2image.convert_from_path
再次成功完成。
问题:
Jupyter 解释器是否“向前看”以查看稍后是否会有命令要求 x 窗口系统并根据信息更改当前内容的解释。如果是这样,为什么?这很常见吗?从其他文件加载的函数是否会发生这种情况?到底是怎么回事?
我问的原因是,这花了我很多时间来解决和查明更复杂的功能。这让我很担心,因为我不知道将来如何避免这种情况,除了从现在开始在任何图形上都有一个恐惧症。
解决方案
Jupyter 解释器是否“向前看”以查看稍后是否会有命令要求 x 窗口系统并根据信息更改当前内容的解释。
不,不是的。
如您所知,您可以按任意顺序运行单元格,也可以在运行一次后对其进行修改。除非使用得当,否则这会使笔记本非常脆弱。
但是,您可以将通用代码(例如,初始化您知道需要的窗口的内容)移动到.py
笔记本目录中的常规模块中,然后从那里导入和使用内容。
推荐阅读
- python - 在非标记数据集上使用 MLP 进行聚类
- javascript - 如何在 onSubmit 上设置条件
- reactjs - 在组件页面中隐藏一个组件并显示另一个组件 - react js
- math - 一个数字 N 和一个数字 P 。你的任务是找出从 1 到 N(含)范围内没有数字 P 的数字的数量
- typescript - 导出的变量“Foo”在打字稿中已经或正在使用私有名称“ParentChild”
- php - 如果 WooCommerce 购物车包含至少 X 个产品,则自动添加百分比折扣
- typescript - 如何使用 jest 在 typescript 中模拟外部依赖
- github - 带有纱线浆果 Github 子目录安装的描述符无效
- date - 问题比较数据(公式和脚本)
- r - 在 R 中识别二元数据中的匹配观察