如何用Python批量执行CMD命令并汇总存储结果?
问题解答
可行性说明
完全可行,输出到TXT或Excel都能实现。如果后续需要对结果做筛选、统计分析,Excel更优;如果只是简单保存输出内容,TXT足够且操作更简便。
原代码存在的问题
split()处理带空格的主机名会出错,比如ping "host name"会被拆成['ping', '"host', 'name"'],导致命令执行失败write_text()每次会覆盖文件内容,最终只会保留最后一条命令的输出- 全局
try-except+pass会掩盖所有错误,无法排查问题 - 未处理命令执行失败的场景(比如主机不可达)
修正后的代码(输出到TXT)
import pathlib import subprocess root_dir = pathlib.Path(r"你的文件路径") cmds_file = root_dir.joinpath("命令文件.txt") out_file = root_dir.joinpath("执行结果.txt") # 清空结果文件(可选,按需决定) out_file.write_text("") cmds = cmds_file.read_text().splitlines() for cmd in cmds: print(f"\n正在执行: {cmd}") try: # 使用shell=True处理带空格的命令(仅当命令文件可信时使用) output = subprocess.check_output(cmd, shell=True, encoding="utf-8", stderr=subprocess.STDOUT) result = f"=== 命令: {cmd} ===\n{output}\n\n" print(result) # 追加写入,避免覆盖之前的结果 with open(out_file, "a", encoding="utf-8") as f: f.write(result) except subprocess.CalledProcessError as e: # 捕获命令执行失败的情况,记录错误信息 error_msg = f"=== 命令: {cmd} 执行失败 ===\n错误信息: {e.output}\n\n" print(error_msg) with open(out_file, "a", encoding="utf-8") as f: f.write(error_msg)
输出到Excel的实现(使用openpyxl)
若要输出到Excel,需先安装依赖库:pip install openpyxl,代码示例:
import pathlib import subprocess from openpyxl import Workbook root_dir = pathlib.Path(r"你的文件路径") cmds_file = root_dir.joinpath("命令文件.txt") out_excel = root_dir.joinpath("执行结果.xlsx") wb = Workbook() ws = wb.active ws.append(["命令", "执行结果"]) cmds = cmds_file.read_text().splitlines() for cmd in cmds: print(f"\n正在执行: {cmd}") try: output = subprocess.check_output(cmd, shell=True, encoding="utf-8", stderr=subprocess.STDOUT) ws.append([cmd, output]) except subprocess.CalledProcessError as e: ws.append([cmd, f"执行失败: {e.output}"]) wb.save(out_excel) print(f"结果已保存到 {out_excel}")
注意事项
- 若命令文件来自不可信来源,不要用
shell=True,改用shlex.split()拆分命令:import shlex; args = shlex.split(cmd); output = subprocess.check_output(args, encoding="utf-8", stderr=subprocess.STDOUT) - 确保Python有执行CMD命令的权限,部分命令可能需要管理员身份运行脚本
内容的提问来源于stack exchange,提问作者user17350587
相关产品推荐
相关产品推荐

