这篇文章主要围绕来自Jupyter笔记本的stdout重定向已登陆终端和jupyter重启展开,旨在为您提供一份详细的参考资料。我们将全面介绍来自Jupyter笔记本的stdout重定向已登陆终端的优
这篇文章主要围绕来自Jupyter笔记本的stdout重定向已登陆终端和jupyter 重启展开,旨在为您提供一份详细的参考资料。我们将全面介绍来自Jupyter笔记本的stdout重定向已登陆终端的优缺点,解答jupyter 重启的相关问题,同时也会为您带来bash – 在不使用stderr的情况下将stdout重定向到文件后写入终端?、bash – 如何将STDERR重定向到STDOUT,但忽略原来的STDOUT?、Jupyter启动时如何打开特定的Jupyter笔记本?如何将相似的笔记本文件分组并打开分组?、Jupyter笔记本-GPU的实用方法。
本文目录一览:- 来自Jupyter笔记本的stdout重定向已登陆终端(jupyter 重启)
- bash – 在不使用stderr的情况下将stdout重定向到文件后写入终端?
- bash – 如何将STDERR重定向到STDOUT,但忽略原来的STDOUT?
- Jupyter启动时如何打开特定的Jupyter笔记本?如何将相似的笔记本文件分组并打开分组?
- Jupyter笔记本-GPU
来自Jupyter笔记本的stdout重定向已登陆终端(jupyter 重启)
因此,我尝试将stdout
JupyterNotebook中的某些单元格重定向到与此相关的文件,然后针对其余单元格使用此文件将其取消。第一组单元格的输出按原样放置在文件中。在cancel命令之后的第二组单元格sys.stdout =sys.__stdout__
没有输出,似乎什么也没做,但是我后来意识到它降落在启动笔记本电脑的终端中。
它与完全相同的Python在Python解释器中完美工作:
(miniconda3-latest) cardamom@pegasus:~/Documents/project1 $ pythonPython 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 linuxType "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 in the file and no b''s
Jupyter笔记本中的一种类似方法是在终端中进行以下操作:
[W 22:05:34.192 NotebookApp] 404 GET /nbextensions/widgets/notebook/js/extension.js (127.0.0.1) 1.71ms referer=http://localhost:8889/notebooks/test_stdout.ipynbbbb
如何修改此代码,以便在重置之后,使b出现在通常输出的单元格下面而不是在终端下?
答案1
小编典典我无法对此进行测试,但是我看到的唯一解释是,sys.stdout
它 不是sys.__stdout__
经过重新路由/修改的文件对象,以便能够将数据放入单元格中(您的注释表明它是一个ipykernel.iostream.OutStream
实例)。
因此sys.__stdout__
,您应该存储以下内容的引用,而不是重置为sys.stdout
:
import sysold_stdout = sys.stdoutsys.stdout = open(''stdout.txt'', ''w'')...sys.stdout = old_stdout
请注意,此方法也适用于标准终端。
bash – 在不使用stderr的情况下将stdout重定向到文件后写入终端?
在“程序”的几个地方,我会做类似的事情:log“$thing”>> “$logfile”,其中log是“库”中定义的函数.
# program.sh logfile="log.txt" stuff="hahah heheh hoho" . library.sh for thing in $stuff; do log "$thing" >> "$logfile" done
我的问题:有没有办法在不使用stderr的情况下将函数的某些输出重定向回终端?
# library.sh log () { # This gets written to the log echo "`date --rfc-3339=seconds`: $1" # How to write this to the terminal *without* using stderr? echo "Info: Message written to log." >&2 }
我想避免使用stderr,因为在我的实际程序中,有一个选项可以将错误重定向到文件,但是我想要发送到终端的消息是信息性的,而不是错误,应该始终显示在终端上.
exec 0< /dev/null exec 1> /dev/null exec 2> /dev/null exec 3> /dev/tty echo 'Hello,World!' >&3
bash – 如何将STDERR重定向到STDOUT,但忽略原来的STDOUT?
所以我可以重定向到STDOUT和使用grep,但问题是,我不想原来的STDOUT内容。
所以,这一个不会做
cmd 2>&1 | grep pattern
因为它会混合原STDOUT和STDERR。
和这一个不工作,因为grep不读取STDERR输出:
cmd 1>/dev/null | grep pattern
但也是,这一个不会工作:
cmd 1>/dev/null 2>&1 | grep pattern
因为输出将完全为空,因为一切都写入/ dev / null。
但是必须有一个简单的方法吗?
你最后一个命令的原因:
cmd 1>/dev/null 2>&1 | grep pattern
不工作,源自重定向工作顺序的混乱。您希望最后引用的重定向应用于每个输出上的前一个,以便输出原始标准输出文件描述符(1)将转到/ dev / null,并输出到标准错误文件描述符(2)转到原始标准输出。
但是,这不是shell重定向如何工作。每个重定向通过关闭“源”并将“目标”复制到其中来重新映射文件描述符(参见dup(2)和close(2)的手册页)。这意味着在命令中,标准输出首先被/ dev / null替换,然后标准错误替换为标准输出,即/ dev / null。
什么工作:
因此,要获得所需的效果,您只需要逆转重定向。然后,您将有标准错误转到标准输出,原始标准输出转到/ dev / null:
cmd 2>&1 >/dev/null | grep pattern
(注意,1 before>是不必要的 – 对于输出重定向,标准输出是默认值)
附录:Charlie提到重定向到& – 关闭文件描述符。如果使用支持该扩展的交互式shell(bash和一些其他实现但不是全部,它是not standard),你也可以这样做:
cmd 2>&1 >&- | grep pattern
这可能更好 – 它可以节省一些时间,因为当命令尝试写入标准输出时,对写入的调用可能立即失败,而无需等待上下文切换到内核和驱动程序处理/ dev / null(取决于系统调用实现 – 一些可能在libc函数中捕获,一些也可能有/ dev / null的特殊处理)。如果有很多输出可以值得,并且它的输入更快。
这将主要工作,因为大多数程序不关心如果他们不能写入标准输出(谁真正检查printf的返回值),并不介意标准输出关闭。但是一些程序如果写入失败,可以使用失败代码释放 – 通常阻塞处理器,程序使用一些小心的I / O库或记录到stdandard输出。所以如果它不工作记住这是一个可能的原因,并尝试/ dev / null。
Jupyter启动时如何打开特定的Jupyter笔记本?如何将相似的笔记本文件分组并打开分组?
如何解决Jupyter启动时如何打开特定的Jupyter笔记本?如何将相似的笔记本文件分组并打开分组??
几乎每天都在使用Jupyter时,通常会同时打开多个Jupyter笔记本文件。电脑几乎始终处于开机状态,因此Jupyter也几乎始终处于开机状态。每当打开Jupyter时,通常至少会显示5或6个Jupyter笔记本选项卡,有时可能会打开10个或更多笔记本文件。
只要文件太大,Jupyter笔记本文件的速度就会变慢。很难确切地定义大。大通常发生在100-150个细胞中。只要笔记本电脑明显变慢,那么大就是大。每当笔记本变慢时,都会创建一个新笔记本。将相同的库粘贴到新笔记本中,并且通常在与大型慢速笔记本相同的子文件夹中创建新笔记本。然后,从大而慢的笔记本上取下来的地方提取编码。
一个主笔记本文件夹中有数百个笔记本。笔记本主文件夹下有几十个子文件夹。而且,在试图从混乱中创建订单时,大多数笔记本通常都保存在子文件夹中,这些子文件夹代表程序包类型,功能类型或笔记本代码的用途。子文件夹的名称与笔记本的主题或用途相似。有以dplyr命名的子文件夹,还有以purrr命名的子文件夹,等等。还有以图形,地图,绘图,子设置,映射等命名的子文件夹。因此,将创建Jupyter笔记本并将其保存到以下子文件夹中:代表笔记本电脑主要用途的名称。
Jupyter的一大优点是,每当重新命名Jupyter时,就会再次打开那些最后打开的笔记本文件。这就引出了这个帖子中的问题:
Is there a way to group notebooks so that an entire group can selected and be opened at the same time?
我已经阅读了有关Jupyer Hub的信息,但是这个Hub听起来不像我要找的答案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
Jupyter笔记本-GPU
我正在研究Jupyter Notebook,并希望通过使用Google GPU使其运行更快。我已经进行了一些研究并找到了解决方案,但是它对我没有用。
解决方案是:
“最简单的方法是使用Connect to Local
Runtime,然后选择硬件加速器作为GPU,如Google Colab Free GPU
Tutorial中所示。”
我确实设法将googe
colab连接到jupyter,但是当我尝试将硬件加速器切换到GPU时,我与jupyter笔记本电脑断开了连接……在本教程中,他似乎可以连接到jupyter并仍然使用GPU,但是我不能。
有谁知道如何解决这个问题?
答案1
小编典典我认为您要的是不可能的。一些解释:
在您的情况下,您有两个用于与代码交互的前端:
Jupyter Notebook
(由运行计算机的本地服务器提供给浏览器)Google Colab
(由Google服务器提供)
此外,您有两个后端,用于运行从前端接收的代码:
IPython kernels
(从您的jupyter程序开始)Google cloud runtimes
(在Google云基础架构上运行,可能具有GPU加速功能)
以下组合是可能的:
Jupyer Notebook --> IPython kernel
这可能是您开始使用的设置。Google Colab --> Google cloud runtimes
是Google colab的默认设置。您将笔记本文件上传到Google驱动器(或创建一个新文件)。您在Colab界面中执行的代码可以在Google云基础架构上运行。这也使您可以通过在运行时->更改运行时类型中激活GPU加速来访问它Google Colab --> IPython kernel
您仍然像(2)一样在Google Colab界面中编写代码,但是当执行单元时,它由计算机上的IPython内核使用本地硬件运行。您链接的“本地运行时”帮助文章中介绍了此设置。
您尝试做的事情听起来像:
Jupyter Notebook --> Google cloud runtime
这是不可能的唯一组合。
如果您想在Google云硬件上使用GPU加速来运行笔记本,则有两种选择:
- 将其上传到您的Google云端硬盘,然后在Google Colab中进行编辑/运行(上面的设置2)
- 使用谷歌Compute Engine执行个体所描述的运行Jupyer笔记本电脑在这里。请注意,在这种情况下, 可能需要付费 。
关于来自Jupyter笔记本的stdout重定向已登陆终端和jupyter 重启的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于bash – 在不使用stderr的情况下将stdout重定向到文件后写入终端?、bash – 如何将STDERR重定向到STDOUT,但忽略原来的STDOUT?、Jupyter启动时如何打开特定的Jupyter笔记本?如何将相似的笔记本文件分组并打开分组?、Jupyter笔记本-GPU等相关内容,可以在本站寻找。
本文标签: