简介:
本文所有的例均是假设你在使用来自 http://timgolden.me.uk/python/wmi/cookbook.html 的 WMI 模块。使用此模块,你可以在 Windows 系统中去体验下面这些实用的例子。或许你将由此了解到 WMI 的冰山一角。
下面这些例子,除非有特别说明,均假设你要连接的是当前的机器。如果要连接远程机器,只需要在 WMI 构造器中指定远程机器名即可:
import wmi
c = wmi. WMI ( "some_other_machine" )
注:这都是些完整的例子,你可以直接复制粘贴到一个 .py 文件里面,也可以复制粘贴到 Python 命令行交互窗口(原文作者是在 Windows2000 系统的 CMD 窗口做的测试)。
实例:
列出所有正在运行的进程
import wmi
c = wmi. WMI ()
for process in c . Win32_Process ():
print process. ProcessId , process. Name
列出所有正在运行的记事本进程
import wmi
c = wmi. WMI ()
for process in c . Win32_Process (name= "notepad.exe" ):
print process. ProcessId , process. Name
创建一个新的记事本进程然后结束它
import wmi
c = wmi. WMI ()
process_id, return_value = c . Win32_Process . Create ( CommandLine = "notepad.exe" )
for process in c . Win32_Process ( ProcessId =process_id):
print process. ProcessId , process. Name
result = process. Terminate ()
显示 Win32_Process 类的 .Create 方法的接口
注: wmi 模块会接受 WMI 方法的传入参数作为 Python 的关键字参数,并把传出参数作为一个元组进行返回。
import wmi
c = wmi. WMI ()
print c . Win32_Process . Create
显示没有处于正常运行状态的自启动服务
import wmi
c = wmi. WMI ()
stopped_services = c . Win32_Service ( StartMode = "Auto" , State = "Stopped" )
if stopped_services:
for s in stopped_services:
print s. Caption , "service is not running"
else :
print "No auto services stopped"
显示每个固定磁盘的剩余空间百分比
import wmi
c = wmi. WMI ()
for disk in c . Win32_LogicalDisk ( DriveType = 3 ):
print disk. Caption , "%0.2f%% free" %( 100.0 * long(disk. FreeSpace ) / long(disk. Size ))
运行记事本,等它关闭之后显示它里面的文字
注:这个例子是运行一个进程并且知道它什么时候结束,而不是去处理输入到记事本里面的文字。所以我们只是简单的用记事本打开一个指定文件,等到用户完成输入并关闭记事本之后,显示一下它的内容。
本例不适用于远程机器,因为处于安全考虑,在远程机器上启动的进程是没有界面的(你在桌面上是看不到它们的)。这类远程操作的技术多用于在服务器上运行一个安装程序,安装结束之后重启机器。
import wmi
c = wmi.WMI()
filename = r"c:\temp\temp.txt"
process = c.Win32_Process
process_id, result = process.Create(CommandLine= "notepad.exe " + filename)
watcher = c.watch_for(
notification_type= "Deletion" ,
wmi_class= "Win32_Process" ,
delay_secs= 1 ,
ProcessId=process_id
)
watcher()
print "This is what you wrote:"
print open(filename).read()
监视新的打印任务
import wmi
c = wmi.WMI()
print _job_watcher = c.W in 32_PrintJob.watch_ for (
notification_ type = "Creation" ,
delay_secs=1
)
while 1:
pj = print _job_watcher()
print "User %s has submitted %d pages to printer %s" % \
(pj.Owner, pj.TotalPages, pj.Name)
重启远程机器
注:要对远程系统进行这样的操作, WMI 脚本必须具有远程关机 (RemoteShutdown) 的权限,也就是说你必须在连接别名中进行指定。 WMI 构造器允许你传入一个完整的别名,或者是指定你需要的那一部分。使用 wmi.WMI.__init__ 的帮助文档可以找到更多相关内容。
import wmi
# other_machine = "machine name of your choice"
c = wmi. WMI (computer=other_machine, privileges=[ "RemoteShutdown" ])
os = c . Win32_OperatingSystem ( Primary = 1 )[ 0 ]
os. Reboot ()
对于启用 IP 的网卡显示其 IP 和 MAC 地址
import wmi
c = wmi.WMI()
for interface in c . Win32_NetworkAdapterConfiguration (IPEnabled= 1 ):
print interface . Description , interface.MACAddress
for ip_address in interface . IPAddress :
print ip_address
print
查看自启动项
import wmi
c = wmi. WMI ()
for s in c . Win32_StartupCommand ():
print "[%s] %s <%s>" %(s. Location , s. Caption , s. Command )
监视事件日志中的错误信息
import wmi
c = wmi. WMI (privileges=[ "Security" ])
watcher = c .watch_for(
notification_type= "Creation" ,
wmi_class= "Win32_NTLogEvent" ,
Type = "error"
)
while 1 :
error = watcher()
print "Error in %s log: %s" %(error. Logfile , error. Message )
# send mail to sysadmin etc.
列出注册表子键
注:本例及以下几例使用了 Registry() 这个方便的函数,此函数是早期加入到 wmi 包的,它等效于:
import wmi
r = wmi. WMI (namespace= "DEFAULT" ). StdRegProv
import _winreg
import wmi
r = wmi. Registry ()
result, names = r. EnumKey (
hDefKey=_winreg. HKEY_LOCAL_MACHINE ,
sSubKeyName= "Software"
)
for key in names:
print key
增加一个新的注册表子键
import _winreg
import wmi
r = wmi.Registry()
result, = r.CreateKey(
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName= r"Software\TJG"
)
增加一个新的注册表键值
import _winreg
import wmi
r = wmi.Registry()
result, = r.SetStringValue(
hDefKey=_winreg.HKEY_LOCAL_MACHINE,
sSubKeyName= r"Software\TJG" ,
sValueName= "ApplicationName" ,
sValue= "TJG App"
)
创建一个新的 IIS 站点
import wmi
c = wmi.WMI(namespace= "MicrosoftIISv2" )
#
# Could as well be achieved by doing:
# web_server = c.IISWebService(Name="W3SVC")[0]
#
for web_server in c.IIsWebService(Name= "W3SVC" ):
break
binding = c.new( "ServerBinding" )
binding.IP = ""
binding.Port = "8383"
binding.Hostname = ""
result, = web_server.CreateNewSite(
PathOfRootVirtualDir= r"c:\inetpub\wwwroot" ,
ServerComment= "My Web Site" ,
ServerBindings= [binding.ole_object]
)
显示共享目录
import wmi
c = wmi. WMI ()
for share in c . Win32_Share ():
print share. Name , share. Path
显示打印任务
import wmi
c = wmi. WMI ()
for printer in c . Win32_Printer ():
print printer. Caption
for job in c . Win32_PrintJob ( DriverName =printer. DriverName ):
print " " , job. Document
print
显示磁盘分区
import wmi
c = wmi. WMI ()
for physical_disk in c . Win32_DiskDrive ():
for partition in physical_disk.associators( "Win32_DiskDriveToDiskPartition" ):
for logical_disk in partition .associators( "Win32_LogicalDiskToPartition" ):
print physical_disk. Caption , partition . Caption , logical_disk. Caption
安装一个产品
import wmi
c = wmi. WMI ()
c . Win32_Product . Install (
PackageLocation = "c:/temp/python-2.4.2.msi" ,
AllUsers = False
)
使用指定用户名连接另一台机器
注:你不能使用这个方法连接本机
import wmi
#
# Using wmi module before 1.0rc3
#
connection = wmi.connect_server(
server= "other_machine" ,
user= "tim" ,
password= "secret"
)
c = wmi. WMI (wmi=connection)
#
# Using wmi module at least 1.0rc3
#
c = wmi. WMI (
computer= "other_machine" ,
user= "tim" ,
password= "secret"
)
显示一个方法的签名
import wmi
c = wmi. WMI ()
for opsys in c . Win32_OperatingSystem ():
break
print opsys. Reboot
print opsys. Shutdown
创建任务计划
注: WMI 的 ScheduledJob 类相当于 Windows 的 AT 服务 ( 通过 at 命令来控制 ) 。
import os
import wmi
c = wmi.WMI ()
one_minutes_time = datetime.datetime.now() + datetime.timedelta(minutes= 1 )
job_id, result = c.Win32_ScheduledJob.Create(
Command= r"cmd.exe /c dir /b c:\ > c:\\temp.txt" ,
StartTime=wmi.from_time(one_minutes_time)
)
print job_id
for line in os.popen( "at" ):
print line
以最小化的方式运行一个进程
import wmi
SW_SHOWMINIMIZED = 1
c = wmi. WMI ()
startup = c . Win32_ProcessStartup .new( ShowWindow = SW_SHOWMINIMIZED )
pid, result = c . Win32_Process . Create (
CommandLine = "notepad.exe" ,
ProcessStartupInformation =startup
)
print pid
查看磁盘类型
import wmi
DRIVE_TYPES = {
0 : "Unknown" ,
1 : "No Root Directory" ,
2 : "Removable Disk" ,
3 : "Local Disk" ,
4 : "Network Drive" ,
5 : "Compact Disc" ,
6 : "RAM Disk"
}
c = wmi. WMI ()
for drive in c . Win32_LogicalDisk ():
print drive. Caption , DRIVE_TYPES [drive. DriveType ]
列出命名空间
import wmi
def enumerate_namespaces (namespace= u"root" , level= 0 ):
print level * " " , namespace.split( "/" )[ -1 ]
c = wmi.WMI(namespace=namespace)
for subnamespace in c.__NAMESPACE():
enumerate_namespaces (namespace + "/" + subnamespace.Name, level + 1 )
enumerate_namespaces()
在线程中使用 WMI
注: WMI 技术是基于 COM 的,要想在线程中使用它,你必须初始化 COM 的线程模式,就算你要访问一个隐式线程化的服务也是如此。
import pythoncom
import wmi
import threading
import time
class Info (threading.Thread):
def __init__ (self):
threading.Thread.__init__(self)
def run (self):
print 'In Another Thread...'
pythoncom.CoInitialize()
try :
c = wmi.WMI()
for i in range( 5 ):
for process in c.Win32_Process():
print process.ProcessId, process.Name
time.sleep( 2 )
finally :
pythoncom.CoUninitialize()
if __name__ == '__main__' :
print 'In Main Thread'
c = wmi.WMI()
for process in c.Win32_Process():
print process.ProcessId, process.Name
Info().start()
监控多台机器的电源事件
注:这个例子演示了外部事件、线程、远程监控等,所有这些都在一个小小的包里面!无论一台机器何时进入或退出挂起状态,电源子系统都会通过 WMI 产生一个外部事件。外部事件是非常有用的,因为 WMI 不必轮询也可以保证你不会错过任何事件。这里的多台机器只是使用进程的一个实际例子而已。
import pythoncom
import wmi
import threading
import Queue
class Server (threading.Thread):
def __init__ (self, results, server, user, password):
threading.Thread.__init__(self)
self.results = results
self.server = server
self.user = user
self.password = password
self.setDaemon( True )
def run (self):
pythoncom.CoInitialize()
try :
#
# If you don't want to use explicit logons, remove
# the user= and password= params here and ensure
# that the user running *this* script has sufficient
# privs on the remote machines.
#
c = wmi.WMI (self.server, user=self.user, password=self.password)
power_watcher = c.Win32_PowerManagementEvent.watch_for()
while True :
self.results.put((self.server, power_watcher()))
finally :
pythoncom.CoUninitialize()
#
# Obviously, change these to match the machines
# in your network which probably won't be named
# after Harry Potter characters. And which hopefully
# use a less obvious admin password.
#
servers = [
( "goyle" , "administrator" , "secret" ),
( "malfoy" , "administrator" , "secret" )
]
if __name__ == '__main__' :
power_events = Queue.Queue()
for server, user, password in servers:
print "Watching for" , server
Server (power_events, server, user, password).start()
while True :
server, power_event = power_events.get()
print server, "=>" , power_event.EventType
查看当前的墙纸
import wmi
import win32api
import win32con
c = wmi. WMI ()
full_username = win32api. GetUserNameEx (win32con. NameSamCompatible )
for desktop in c . Win32_Desktop ( Name =full_username):
print \
desktop. Wallpaper or "[No Wallpaper]" , \
desktop. WallpaperStretched , desktop. WallpaperTiled
原文地址: http://www.bathome.net/thread-16256-1-1.html
Python wmi Cookbook 中文翻译相关推荐
- Concurrency in C# Cookbook中文翻译 :1.3并发性概述:响应式编程入门(Rx)
Introduction to Reactive Programming (Rx) 响应式编程入门(Rx) Reactive programming has a higher learning cur ...
- python代码是什么意思中文翻译_python什么意思中文翻译
python什么意思中文翻译? python的中文翻译意思是蟒蛇,而实际上这个名字的来历是发明者为了纪念他喜爱马戏团的一个角色,角色名就是python. 推荐:<python教程> 相关介 ...
- python的中文翻译-再聊聊Python中文社区的翻译
在写<学习Python,怎能不懂点PEP呢?>的时候,我已经发现国内的Python翻译环境不容乐观.这个结论可能不对,毕竟这几年Python大热,或许有不少优秀的翻译项目,只是我还不知道而 ...
- python是什么意思中文-python是什么意思中文翻译
原本如临大敌气氛紧绷的一众黑袍长老脸色瞬间变的敬畏起来.python是什么意思中文翻译 "仅凭你们几人,对上我根本没有任何胜算!"白骨鹰王那双骨翼猛的展开,瞬间朝四周爆射出几根骨刺 ...
- 利用python批量将excel中文翻译成英文
目录 操作过程中不断遇到新的问题,思路的转换过程 背景 第一天 操作过程 第二天 正则表达式是个好东西 第三天 第四天 第五天 遇到的小问题 操作过程中不断遇到新的问题,思路的转换过程 背景 今天接到 ...
- python中文意思是什么-python是什么意思中文翻译
原本如临大敌气氛紧绷的一众黑袍长老脸色瞬间变的敬畏起来.python是什么意思中文翻译 "仅凭你们几人,对上我根本没有任何胜算!"白骨鹰王那双骨翼猛的展开,瞬间朝四周爆射出几根骨刺 ...
- 案例:用python将中文翻译的和英文原文合成新的word文档
案例:用python中文翻译的和英文原文合成新的word文档 一 问题的形成 需求的描述:一个英语翻译专业的研究生同学有一个期末作业.老师给了一个英文的文档,需要同学们翻译成中文.老师给的文档是格式如 ...
- 迎战2022 - Python中文翻译《环球时报》整篇文章实战演示,调用有道翻译API接口进行英文转中文翻译实例训练
Python 调用有道翻译 API 接口翻译<环球时报>整篇文章实战演示 第一章:翻译效果展示 ① 翻译文章示例一[得益于中国援助的数字电视,喀麦隆农村社区享受着非洲国家杯] ② 翻译文章 ...
- python脚本实现将代码中的中文翻译为其他语言
python脚本实现将代码中的中文翻译为其他语言 如果我们写的代码中带有中文的字符提示,现在要将其翻译成为其他国家的语言,在没有做多国语言配置的情况下只能自己手动复制翻译.这种机械重复性动作完全可以交 ...
最新文章
- java 获取接口的注解_java反射注解妙用-获取所有接口说明
- deferred Transports Protocols 简单介绍
- php xmldom扩展,如何使用比根更深入的PHP DOM向XML添加新元素?
- python-函数-局部变量与全局变量
- iOS AVAudioRecorder参数设置
- Spring 框架 IOC 与 DI 的总结
- python安装过程中出现文件或目录损坏且无法读取_解决安装python库时windows error5 报错的问题...
- mysql in union all_MySQL中使用or、in与union all在查询命令下的效率对比_MySQL
- 如何在柱状图中点连线_如何快速掌握MSA
- 2.栅格的类中同时设置col-md-* col-sm-*的作用
- 支持医学研究的Apple开源移动框架
- 爬虫提交form表单中含有(unable to decode value)解决方法
- 在线js调试工具JSbin、jsFiddle
- python-gui-pyqt5的使用方法-1
- server sql 数据总行数_一种快速统计SQL Server每个表行数的方法
- SAS入门基础(常用函数)
- android 抓取解析systrace
- 初探富文本之编辑器引擎
- 个人做的职业规划以及分析报告
- RabbitMQ之交换机的讲解
热门文章
- 比较MQTT与OPC-UA
- 阿里面试官Redis把我问到哑口无言…
- 用js写一个功德木鱼
- 怎么把vue改写成html,vue将字符串转为为html
- 为静态照片添加动画表情的iOS应用MugLife来了,网友惊呼「这技术等着被收购吧」
- 第一次将所学的指针和递归结合在一起
- 误删除文件怎么找回 数据恢复用这些方法
- numeric scale mysql_mysqldecimal、numeric数据类型
- 北盛 哈尔滨工业2011招聘笔试名单
- 【Android UI设计与开发】4.底部菜单栏(一)Fragment介绍和简单实现