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

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

我正在尝试用先前定义的字符串替换标准输入。
浏览 stack overflow 后,我找到了几个解决方案(尽管主要针对 python2)。

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

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

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

最佳答案

简短的回答是 Jupyter notebook 不支持 stdin/stdout,因此您不能在 notebook 代码中依赖它们。

更长的答案是标准输入/标准输出在 Jupyter 中的实现与在标准 Python 中的实现不同,这是由于 Jupyter 如何接受输入/显示输出的特殊性。如果您想要在当前没有可用输入的情况下要求用户输入的东西,这会起作用:

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) 

引用

stdin/stdout 在 Jupyter/IPython 文档中被略微提及。不过,这是来自 %reset magic docs 的相关直接引述。 :

Calling this magic from clients that do not implement standard input, such as the ipython notebook interface, will reset the namespace without confirmation.

关于python - 使用jupyter在python3中用字符串替换标准输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49877747/

相关文章:

python - 多个资源同步阻塞

visual-studio - 如何在 Visual Studio 中使用 f# interactive 读取用户输入?

Java usb输入平台无关

android - 如何在表单中制作文件输入字段?

Python:从字符串添加决策列(Pandas)

python - 反正有没有使用mongoengine在列中获得最大值?

python - 复制列表并在一行中附加一个元素

python - 在 python 子进程 popen 中格式化命令

python - 我如何在 Numpy 的矩阵中计算 xi^j

python - 将 Python 中的 '*' 字符读入新字符串时出现问题