使用 jupyter 将标准输入替换为 python3 中的字符串

2024-04-10

我试图用先前定义的字符串替换标准输入。
在浏览堆栈溢出后,我找到了几种解决方案(尽管主要针对 python2)。

例如,下面的解决方案在 ideone.com 中进行了测试并且似乎有效,但是当我尝试将其添加到我的 jupyter 笔记本中的代码中时,标准输入的重新定义被忽略。

这是由于 jupyter 还是我的代码中的某些问题造成的,我该如何修复它?

import io,sys
s = io.StringIO('Hello, world!')
sys.stdin = s
sys.__stdin__ = s 
r = input() 
print(r) 

简而言之,Jupyter 笔记本不支持 stdin/stdout,因此您不能在笔记本代码中依赖它们。

更长的答案是,由于 Jupyter 如何接受输入/显示输出的细节,stdin/stdout 在 Jupyter 中的实现方式与标准 Python 中不同。如果您想要在当前没有可用输入的情况下要求用户输入的内容,则可以使用以下方法:

import io,sys

# if sys.stdin is empty, the user will be prompted for input
# sys.stdin = io.StringIO('')
sys.stdin = io.StringIO('Hello world')

r = sys.stdin.readline()
if not r:
    r = builtins.input()

print(r) 

参考

Jupyter/IPython 文档中以某种省略的方式谈论 stdin/stdout。不过,这里有一个相关的直接引用,来自%reset魔法文档 http://ipython.readthedocs.io/en/stable/interactive/magics.html#magic-reset:

从不实现标准输入的客户端(例如 ipython 笔记本接口)调用此魔法将重置名称空间而不进行确认。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 jupyter 将标准输入替换为 python3 中的字符串 的相关文章

随机推荐