当没有跳过输入的选项时,如何绕过 Python3 中的输入提示?
How can you bypass an input prompt in Python3 when there is no option to skip the input?
使用一个库,当我调用我将调用的某个函数时 foo()
,系统会提示我这样输入:
def foo():
if input("Proceed?") == 'yes':
take_action()
我需要回答才能继续。
但我希望能够使用默认值遍历 foo()
来提供提示。
问题是开发人员没有提供为提示提供默认值的选项。
理想情况下,他们会这样写 foo()
:
def foo(default_response=None):
if default_response == 'yes':
take_action()
elif input("Proceed?") == 'yes':
take_action()
鉴于他们没有提供默认响应的选项,我有没有办法在不更改源代码的情况下循环 foo()
并自动提供输入?
一种解决方案是monkey patch库临时替换input
函数。例如,如果我的模块 foo.py
看起来像这样:
def take_action():
print("doing something")
def foo():
if input("Proceed? ") == "yes":
take_action()
我可以这样写bar.py
:
import foo
from unittest import mock
def fake_input(default_response=None):
'''Creates a replacement for the `input` function that will
return a default response if one was provided.'''
def _input(prompt):
return default_response if default_response else input(prompt)
return _input
with mock.patch("foo.input", new=fake_input("yes")):
foo.foo()
foo.foo()
如果你运行这段代码,你会看到第一个调用foo.foo()
使用默认输入,并在没有提示的情况下继续。第二个电话
to foo.foo()
会正常提示。
使用一个库,当我调用我将调用的某个函数时 foo()
,系统会提示我这样输入:
def foo():
if input("Proceed?") == 'yes':
take_action()
我需要回答才能继续。
但我希望能够使用默认值遍历 foo()
来提供提示。
问题是开发人员没有提供为提示提供默认值的选项。
理想情况下,他们会这样写 foo()
:
def foo(default_response=None):
if default_response == 'yes':
take_action()
elif input("Proceed?") == 'yes':
take_action()
鉴于他们没有提供默认响应的选项,我有没有办法在不更改源代码的情况下循环 foo()
并自动提供输入?
一种解决方案是monkey patch库临时替换input
函数。例如,如果我的模块 foo.py
看起来像这样:
def take_action():
print("doing something")
def foo():
if input("Proceed? ") == "yes":
take_action()
我可以这样写bar.py
:
import foo
from unittest import mock
def fake_input(default_response=None):
'''Creates a replacement for the `input` function that will
return a default response if one was provided.'''
def _input(prompt):
return default_response if default_response else input(prompt)
return _input
with mock.patch("foo.input", new=fake_input("yes")):
foo.foo()
foo.foo()
如果你运行这段代码,你会看到第一个调用foo.foo()
使用默认输入,并在没有提示的情况下继续。第二个电话
to foo.foo()
会正常提示。