在带自有参数的Python脚本中调用另一脚本并传递原类型参数
解决方案
通过命令行调用Python脚本时,所有传入的参数本质上都是字符串格式,不存在直接跨进程传递原生Python类型的机制,你可以根据自己的场景选择以下两种处理方式:
方案1:在script1中使用参数解析工具自动完成类型转换(推荐)
不需要手动写转换逻辑,用Python标准库argparse即可在定义参数时直接指定类型,解析时自动完成转换,示例代码:
# script1.py 示例 import argparse parser = argparse.ArgumentParser() parser.add_argument("--num", type=int, help="输入整数参数") parser.add_argument("--rate", type=float, help="输入浮点数参数") parser.add_argument("--flag", action="store_true", help="布尔开关参数") args = parser.parse_args() # 此处拿到的args.num已经是int类型,args.rate是float,args.flag是bool print(type(args.num), type(args.rate), type(args.flag))
如果script2是用subprocess调用script1,直接传参即可,不需要额外处理,argparse会自动完成类型转换。
方案2:直接导入script1的业务逻辑调用(适合不需要独立运行script1的场景)
如果你的script1本身就是封装了业务逻辑,可以把核心逻辑抽成函数,script2直接导入调用,此时可以直接传递任意Python原生类型,完全不需要做类型转换,示例:
# script1.py 改造后 def core_logic(num: int, rate: float, flag: bool): # 原有业务逻辑写在这里 print(type(num), type(rate), type(flag)) if __name__ == "__main__": # 保留命令行调用的入口,不影响原有使用方式 import argparse parser = argparse.ArgumentParser() parser.add_argument("--num", type=int) parser.add_argument("--rate", type=float) parser.add_argument("--flag", action="store_true") args = parser.parse_args() core_logic(args.num, args.rate, args.flag)
# script2.py 中直接导入调用 from script1 import core_logic # 直接传原生类型参数即可 core_logic(num=10, rate=0.5, flag=True)
这种方式比跨进程调用性能更好,也不存在类型转换的问题。
内容的提问来源于stack exchange,提问作者Mika
相关产品推荐
相关产品推荐

