如何从Python脚本传递参数调用另一个Python脚本?
嘿,这个问题其实有两种常用的解决思路,我给你一步步拆解下,保证你能轻松实现~
方法1:用subprocess模块模拟终端传参
如果你想完全复刻在终端里运行python script1.py 参数1 参数2的效果,那用subprocess模块就最合适了,它能帮你启动新进程调用script1,还能获取它的输出。
先写script1.py的代码,让它能读取命令行参数:
# script1.py import sys if __name__ == "__main__": # sys.argv[0]是脚本本身的路径,后面的元素才是我们传入的参数 if len(sys.argv) > 1: print(f"script1收到的参数:{sys.argv[1:]}") else: print("script1没有收到任何参数")
然后在script2.py里调用它,传递你想要的参数:
# script2.py import subprocess # 调用script1.py,同时传递"hello"和"world"两个参数 run_result = subprocess.run( ["python", "script1.py", "hello", "world"], capture_output=True, text=True # 让输出以字符串形式返回,而不是字节 ) # 打印script1的运行结果 print("script2调用script1的输出:") print(run_result.stdout.strip())
当你在终端运行python script2.py时,会得到这样的输出:
script2调用script1的输出: script1收到的参数:['hello', 'world']
方法2:将script1作为模块导入,直接传参给函数
如果只是想复用script1里的逻辑,没必要启动新进程,直接把它当作Python模块导入,调用里面的函数传参更高效。
先改造script1.py,把参数处理逻辑封装成函数:
# script1.py def handle_args(*args): if args: return f"script1收到的参数:{list(args)}" else: return "script1没有收到任何参数" # 保留终端运行的逻辑,这样单独执行script1.py时也能正常工作 if __name__ == "__main__": import sys print(handle_args(*sys.argv[1:]))
然后在script2.py里导入这个函数,直接传参调用:
# script2.py from script1 import handle_args # 直接调用函数,传递任意数量的参数 output = handle_args("hello", "world", "python") print("script2调用script1的输出:") print(output)
运行python script2.py后,输出是:
script2调用script1的输出: script1收到的参数:['hello', 'world', 'python']
简单总结下:如果需要保持script1的独立运行能力,选第一种方法;如果只是想复用逻辑,第二种方法更高效灵活~
内容的提问来源于stack exchange,提问作者Fernando S. Peregrino
相关产品推荐
相关产品推荐

