Python 3:无需修改原脚本,如何循环自动传递输入值?
解决无法修改原脚本时循环自动传递input输入的问题
因为无法修改Original_Script,我们可以通过**猴子补丁(Monkey Patching)**替换该模块内的input函数,让它自动返回预设的输入值,而非等待手动输入。
具体实现步骤
- 准备一个生成器/迭代器,按原脚本中
input()的调用顺序,依次提供每轮循环需要的输入值。 - 替换
Original_Script模块的input函数,使其每次调用都从迭代器中取出下一个预设值。 - 正常循环调用
main函数即可,无需手动输入。
代码示例
import Original_Script # 生成器:按原脚本input的调用顺序,返回所有需要的输入值 def auto_input_generator(): for i in range(9): # 假设原脚本中先调用input获取input1,再调用input获取input2 yield str(i) # input默认返回字符串,注意类型匹配 yield "22" # 转换为迭代器 input_supplier = auto_input_generator() # 替换Original_Script的input函数 Original_Script.input = lambda: next(input_supplier) # 循环调用main,自动传入预设输入 for _ in range(9): Original_Script.main(arg1, arg2, arg3)
关键说明
- 必须保证生成器中
yield的顺序、数量,和原脚本里input()的调用顺序、次数完全一致,否则会出现取值异常。 - 如果原脚本中需要将输入转为整数/浮点数,只需确保
yield的值可以被正确转换即可(比如直接yield数字或对应格式的字符串)。 - 你之前尝试直接赋值
Original_Script.input1无效,大概率是因为原脚本的main函数每次执行时都会重新调用input()覆盖全局变量,而猴子补丁是从根源拦截输入请求,避免了这个问题。
内容的提问来源于stack exchange,提问作者FindAnalysy
相关产品推荐
相关产品推荐

