You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python脚本执行时重复请求输入的问题及解决方法

问题原因

你遇到的重复输入问题,核心原因是Python导入模块时会执行模块的所有顶层代码:

  • 第一次输入是直接运行script1.py时,执行了开头的input代码;
  • 当script1.py里的exec执行script2.py时,script2.py中的from script1 import a, b, c会触发Python重新加载并执行script1.py的顶层代码,于是又出现了第二次输入请求,两次输入对应两次输出。
解决方案

这里提供三种可行的修改方式,按需选择:

方案1:用if __name__ == '__main__'隔离执行代码

把script1.py中需要直接运行的代码(输入和exec)放到if __name__ == '__main__':块里,这样当script1被其他模块导入时,这部分代码不会执行,只有直接运行script1时才触发。

修改后的script1.py:

# 先定义变量,方便被导入
a = ''
b = ''
c = ''

if __name__ == '__main__':
    a = input('enter value a - ')
    b = input('enter value b - ')
    c = input('enter value c - ')

    with open('script2.py') as script2:
        exec(script2.read())

script2.py保持不变即可。

方案2:通过exec上下文传递变量,避免导入

让script1在执行script2的代码时,把当前的变量传递过去,script2直接使用这些变量,不用再导入script1。

修改后的script1.py:

a = input('enter value a - ')
b = input('enter value b - ')
c = input('enter value c - ')

with open('script2.py') as script2:
    # 把当前全局变量传递给exec的执行环境
    exec(script2.read(), globals())

修改后的script2.py:

total_value = a + b + c
print(total_value)

方案3:改用函数传递参数(最规范)

把script2的逻辑封装成函数,script1获取输入后直接调用这个函数并传入参数,完全避免模块导入时的代码执行问题。

修改后的script1.py:

import script2

a = input('enter value a - ')
b = input('enter value b - ')
c = input('enter value c - ')

# 调用script2的函数并传入参数
script2.calculate_and_print(a, b, c)

修改后的script2.py:

def calculate_and_print(a, b, c):
    total_value = a + b + c
    print(total_value)

内容的提问来源于stack exchange,提问作者user23497777

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 22:25:23