我在远程服务器上运行 jupyter 笔记本时遇到问题。我当前的设置是这样的:
tmux然后我会 ssh 进入远程服务器并运行jupyter notebook --no-browser --port=xxxx。然后在我的本地计算机上运行ssh -L yyyy:localhost:xxxx user@server.domain. 然后我会导航到localhost:yyyy那里并运行我的 jupyter 笔记本。
这一切都很好,直到 ssh 连接挂起或中断。然后,当我再次重新连接 ssh 管道时ssh -L yyyy:localhost:xxxx user@server.domain,我可以看到同一个笔记本,但我看不到断开连接时应该存在的单元的任何输出。尽管笔记本仍将作为服务器上的进程在后台运行,但笔记本也不会执行代码。
我的问题是,如何使 jupyter 笔记本可以远程访问,即使远程连接断开,所有代码块也将继续运行并提供输出。以及远程连接恢复后如何查看所有这些输出。
因此,我尝试将stdoutJupyter Notebook中的某些单元格重定向到与此相关的文件,然后针对其余单元格使用此文件将其取消。第一组单元格的输出按原样放置在文件中。在cancel命令之后的第二组单元格sys.stdout = sys.__stdout__没有给出任何输出,似乎什么也没做,但后来我意识到它降落在启动笔记本电脑的终端中。
它与完全相同的Python在Python解释器中完美工作:
(miniconda3-latest) cardamom@pegasus:~/Documents/project1 $ python
Python 3.6.0 |Continuum Analytics, Inc.| (default, Dec 23 2016, 12:22:00)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.stdout = open('stdout.txt', 'w')
>>> print("a")
>>> print("a")
>>> print("a")
>>> sys.stdout = sys.__stdout__
>>> print ("b")
b
>>> print ("b")
b
>>> print ("b")
b
>>> # lots of a's are …Run Code Online (Sandbox Code Playgroud)