如何在Python脚本A中导入需通过系统参数启动运行的脚本B
导入依赖命令行参数的Python脚本方案
方案1:重构脚本B(最推荐,无副作用)
将脚本B的核心逻辑和命令行执行逻辑拆分,把依赖sys.argv的代码放到if __name__ == "__main__"代码块内,这样导入时不会自动执行参数读取逻辑。
重构后的B.py示例:
import sys # 核心逻辑封装为函数,不依赖全局sys.argv def core_func(arg1: int, arg2: int) -> int: return arg1 + arg2 # 仅直接运行B.py时才读取命令行参数 if __name__ == "__main__": arg1 = int(sys.argv[1]) arg2 = int(sys.argv[2]) print(core_func(arg1, arg2))
脚本A导入用法:
import B # 直接调用B的模块方法,自定义传入参数 res = B.core_func(30, 10) print(res)
方案2:不修改B.py,临时注入命令行参数
如果无法修改B的代码,可以在导入B前手动修改sys.argv模拟命令行传参,导入完成后可恢复原始参数避免影响后续逻辑。
脚本A示例:
import sys # 备份原始argv old_argv = sys.argv.copy() # 模拟执行python B.py 30 10的参数结构 sys.argv = ["B.py", "30", "10"] # 此时导入B会正常读取参数 import B # 恢复原始argv sys.argv = old_argv # 可直接访问B内的所有变量、函数 print(B.arg1) print(B.core_func())
注意:如果B内有全局的打印、文件写入等操作,导入时会自动执行。
方案3:仅需要B的运行结果,无需导入内部模块
如果不需要调用B的内部方法和变量,只是要获取B运行后的输出,可以直接用subprocess执行命令,无需导入:
import subprocess run_res = subprocess.run( ["python", "B.py", "30", "10"], capture_output=True, text=True ) # 打印B的标准输出内容 print(run_res.stdout)
内容的提问来源于stack exchange,提问作者user9404237
相关产品推荐
相关产品推荐

