使用jupyter在python3中用字符串替换标准输入

时间:2018-04-17 12:08:44

标签: python python-3.x input jupyter-notebook jupyter

我正在尝试用先前定义的字符串替换标准输入 在浏览堆栈溢出后,我发现了几个解决方案(尽管主要用于python2)。

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

这是由于jupyter还是我的代码中的一些问题,我该如何解决?

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

1 个答案:

答案 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) 

参考

在Jupyter / IPython文档中,stdin / stdout在某些方面有所提及。不过,这是%reset magic docs

的相关直接引用
  

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