如何修改Python脚本实现带不同参数的程序串行调用?
解决Python串行执行MSSQL2PostgreSQLPro_Cons.exe的问题
你当前脚本里的start命令会让每个程序在独立新窗口中并行运行,os.system会立即返回而不等待程序执行完毕。要实现串行执行,只需去掉start,或者使用更现代的subprocess模块,以下是具体方案:
方案1:修改os.system命令(简单直接)
去掉命令中的start,os.system会自动阻塞,直到当前程序执行完成后再执行下一行代码:
import os os.system("MSSQL2PostgreSQLPro_Cons.exe /Session:{}".format(parameter1)) os.system("MSSQL2PostgreSQLPro_Cons.exe /Session:{}".format(parameter2)) os.system("MSSQL2PostgreSQLPro_Cons.exe /Session:{}".format(parameter3))
方案2:使用subprocess模块(推荐,更可控)
subprocess是Python官方推荐替代os.system的模块,支持捕获输出、错误处理等更多功能,默认会阻塞等待程序执行完成:
import subprocess # 使用format格式化参数 subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", "/Session:{}".format(parameter1)], check=True) subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", "/Session:{}".format(parameter2)], check=True) subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", "/Session:{}".format(parameter3)], check=True) # 或者用更简洁的f-string(Python 3.6及以上版本支持) # subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", f"/Session:{parameter1}"], check=True) # subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", f"/Session:{parameter2}"], check=True) # subprocess.run(["MSSQL2PostgreSQLPro_Cons.exe", f"/Session:{parameter3}"], check=True)
注意事项
check=True会在程序执行返回非0状态码(执行失败)时抛出subprocess.CalledProcessError异常,方便捕获处理错误;不需要自动抛异常的话可以去掉该参数。- 确保
MSSQL2PostgreSQLPro_Cons.exe在脚本当前工作目录下,或者直接指定程序的完整路径(如"C:\\Tools\\MSSQL2PostgreSQLPro_Cons.exe")。
内容的提问来源于stack exchange,提问作者Yang L
相关产品推荐
相关产品推荐

