这个程序和所有需要安装的补丁文件放在同一目录,程序检查系统目前已经安装了哪些补丁,自动安装还没有安装的补丁。
# -*- coding: cp936 -*-
import glob
import subprocess
patched_kb = []
patch_file_kb = []
# 得到系统已经安装的补丁的KB号
patch1 = subprocess.check_output("wmic qfe get hotfixid")
for i in patch1.split('\r\n'):
if (cmp(i.strip(), "HotFixID") != 0) and (cmp(i, "") != 0):
i = i.lstrip("KB")
patched_kb.append(i.strip())
#print patched_kb
#print "---------------"
# 得到补丁文件的KB号
kb_list = glob.glob(r"WindowsServer2003-KB*.exe")
for line in kb_list:
res = filter(str.isdigit, line.split("-")[1])
patch_file_kb.append(res)
#print patch_file_kb
#print "---------------"
# 输出所有未安装的补丁到must_patch
must_patch = set(patch_file_kb).difference(patched_kb)
#print must_patch
#print "---------------"
for patch_file in must_patch:
# 根据KB号搜索补丁文件名
patch_file = glob.glob(r"WindowsServer2003-KB%s*.exe" % patch_file)
# 安装补丁的命令
patch_cmd = "%s /quiet /norestart" % patch_file[0]
# 执行命令
if subprocess.call(patch_cmd) == 0:
print patch_file, "安装成功"
else:
print patch_file, "安装失败"
用subprocess.check_output()代替了os.system()和read()。