Python主程序与脚本间双向传参及返回值实现方法
Python跨脚本传参与返回值接收实现方案
原有代码问题梳理
- 语法使用错误:
scriptNo1[arg1, arg2]是字典/列表的下标访问语法,模块对象不支持该方式传参 - 逻辑错误:手动修改
sys.argv无法给已导入的模块传参,且代码中传入的是字符串'arg1'/'arg2',并非实际变量值 - 作用域错误:
scriptNo1.py中直接使用arg1/arg2变量,这两个变量未在该脚本的作用域内定义,导入时会直接触发NameError - 执行逻辑错误:模块顶层代码仅在第一次被
import时执行一次,后续修改参数无法触发重新计算
标准实现方式(推荐)
Python跨脚本调用的标准做法是在被调用脚本中封装可调用的函数,通过函数传参、return返回值实现双向数据交互,无需依赖全局变量或命令行参数。
1. 被调用脚本 scriptNo1.py
# Script Program to be used by Main Program def calc_sum(a, b): print("Start Script program") pass_back_val = a + b print("passBackVal in script is: ", pass_back_val) print("End of Script program") return pass_back_val
2. 主程序 main.py
# Main Program import scriptNo1 print("Start Main program") arg1 = 3 arg2 = 5 # 调用模块内函数传参,直接接收返回值 val1 = scriptNo1.calc_sum(arg1, arg2) print(arg1, arg2, val1) print("The end")
运行主程序即可得到预期输出:
Start Main program Start Script program passBackVal in script is: 8 End of Script program 3 5 8 The end
兼容命令行单独运行的扩展写法
如果需要scriptNo1.py既可以被主程序导入调用,也可以单独作为脚本通过命令行传参运行,可增加__name__判断,修改后的scriptNo1.py如下:
# Script Program to be used by Main Program import sys def calc_sum(a, b): print("Start Script program") pass_back_val = a + b print("passBackVal in script is: ", pass_back_val) print("End of Script program") return pass_back_val if __name__ == "__main__": # 仅当直接运行该脚本时,才读取命令行参数执行 arg1 = int(sys.argv[1]) arg2 = int(sys.argv[2]) calc_sum(arg1, arg2)
该写法下,直接在终端执行python scriptNo1.py 3 5也可正常得到计算结果,被导入时不会自动执行命令行读取逻辑,不会触发报错。
内容的提问来源于stack exchange,提问作者Paul Kostro
相关产品推荐
相关产品推荐

