gpt4 book ai didi

python - 来自 Jupyter 笔记本的 stdout 重定向正在登陆终端

转载 作者:行者123 更新时间:2023-12-02 22:36:53 29 4
gpt4 key购买 nike

因此,我尝试将 Jupyter Notebook 中的某些单元格的 stdout 重定向到包含 this 的文件。然后使用 this 取消它对于其余的细胞。第一组单元的输出按照预期落在文件中。取消命令 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 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.ipynb
b
b
b

如何调整此代码,以便在重置它后,b 出现在输出通常所在的单元格下,而不是出现在终端中?

最佳答案

我看到的唯一解释是 sys.stdout 不是 sys.__stdout__ 而是一个重新路由/修改的文件对象,以便能够将数据放入单元格中(您的评论表明它是一个 ipykernel.iostream.OutStream 实例)。

因此,您应该存储 sys.stdout 的引用,而不是重置为 sys.__stdout__:

import sys
old_stdout = sys.stdout
sys.stdout = open('stdout.txt', 'w')
...
sys.stdout = old_stdout

请注意,此方法也适用于标准终端。

关于python - 来自 Jupyter 笔记本的 stdout 重定向正在登陆终端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45200375/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com