python - 如何在 Jupyter Notebook 中模拟用户输入?
问题描述
我使用的笔记本要求一些用户输入。我可以更改 Jupyter Notebook 中的代码,但无法更改 Jupyter Notebook 所依赖的 Python 库的代码。用户输入请求来自这些库之一。
是否可以让 Jupyter Notebook 自动发送一些预定义的用户输入?也就是说,模拟用户输入?
例如,在下面的 Jupyter Notebook 单元格中,我希望 Jupyter NotebookO
在用户提示期间自动输入,这样用户就不必自己输入任何输入:
用户输入通过以下代码来自某个库:
inp = input ("Dataset with same name already exists.\nEnter 'O' to Overwrite or 'L' to Load the existing one." )
解决方案
我在回答时的环境:
jupyter core : 4.6.3
jupyter-notebook : 6.1.4
ipython : 7.19.0
ipykernel : 5.3.4
jupyter client : 6.1.7
您可以使用上下文管理器临时替换input
为要重新输入的消息。此代码应在一个单元格的范围内工作:
from contextlib import contextmanager
import builtins
@contextmanager
def repeat(answer: str):
try:
original_input = builtins.input
def mock_input(*args, **kwargs):
return answer
builtins.input = mock_input
yield
finally:
builtins.input = original_input
#TEST
with repeat('O'):
answer_1 = input('Continue?')
answer_2 = input('Continue?')
answer_3 = input('Continue?')
print(answer_1)
print(answer_2)
print(answer_3)
如果它不起作用或者您想更换input
多个单元格(假设您同时运行多个或所有单元格),您可以尝试以下操作:
from ipykernel.ipkernel import IPythonKernel
ipython_input = IPythonKernel._input_request
def my_input(*args, **kwargs):
print('Hello world!')
return ipython_input(*args, **kwargs)
IPythonKernel._input_request = my_input
只需将身体替换为my_input
您需要的即可。
作为替代方法,请尝试替换IPythonKernel.raw_input
,而不是使用 Jupyter_input_request
中的第一种方法。input
推荐阅读
- c# - 如何在 F# 模块中使用 C# 库中的类?
- excel - 在 VBA 中将特定文件列表从文件夹移动到文件夹
- c# - 将具有两个子级的父实体级联删除到同一个表
- python - 将多列合并为具有相同行数的列
- python - 使用 lambda 和 map 函数仅打印偶数
- sql - 如何选择表作为字符串生成器而不是在 SQL 中使用游标
- java - 如何获取我的单选按钮的值并将其显示在我的更新表单中?
- java - 为什么我的 int numD 不向上计数并打印?
- java - 如何删除字符串中除“1”和“2”之外的所有数字?
- reporting-services - 当报表没有数据时,我们如何避免报表中的空白/空页