社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

当Python3中没有跳过输入的选项时,如何绕过输入提示?

spapadop • 3 年前 • 1136 次点击  

使用一个库,当我调用某个函数时 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() 在不改变源代码的情况下自动提供输入?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/128754
 
1136 次点击  
文章 [ 1 ]  |  最新文章 3 年前
larsks
Reply   •   1 楼
larsks    3 年前

一个解决办法是 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() 使用默认输入,无需提示即可继续。第二个电话 到 福。foo() 将正常提示。