我正在尝试用先前定义的字符串替换标准输入 在浏览堆栈溢出后,我发现了几个解决方案(尽管主要用于python2)。
下面的解决方案例如在ideone.com中测试过并且似乎有效,但是当我尝试将其添加到我的jupyter笔记本中的代码时,标准输入的重新定义将被忽略。
这是由于jupyter还是我的代码中的一些问题,我该如何解决?
import io,sys
s = io.StringIO('Hello, world!')
sys.stdin = s
sys.__stdin__ = s
r = input()
print(r)
答案 0 :(得分:1)
简短的回答是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)
%reset
magic docs:的相关直接引用
从未实现标准输入的客户端(例如ipython notebook接口)调用此魔法将重置命名空间而不进行确认。