我正在通过 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 窗口系统并根据信息更改当前内容的解释。如果是这样,为什么?这很常见吗?从其他文件加载的函数是否会发生这种情况?到底是怎么回事?
我问的原因是,这花了我很多时间来解决和查明更复杂的功能。这让我很担心,因为我不知道将来如何避免这种情况,除了从现在开始在任何图形上都有一个恐惧症。