Python中四种运⾏其他程序的⽅式
在Python中,可以⽅便地使⽤os模块来运⾏其他脚本或者程序,这样就可以在脚本中直接使⽤其他脚本或程序提供的功能,⽽不必再次编写实现该功能的代码。为了更好地控制运⾏的进程,可以使⽤win32process模块中的函数,如果想进⼀步控制进程,则可以使⽤ctype模块,直接调⽤kernel32.dll中的函数.
【⽅式⼀】使⽤os.system()函数运⾏其他程序
os模块中的system()函数可以⽅便地运⾏其他程序或者脚本,模式如下:
os.system(command)
command: 要执⾏的命令,如果要向脚本传递参数,可以使⽤空格分割程序及多个参数。
⽰例如下:
1. >>> import os
2. >>> os.system('notepad') # 打开记事本程序.
3. 0
4. >>> os.system('') # 打开1.txt⽂件,如果不存在,则创建.
5. 0
【⽅式⼆】使⽤ShellExecute函数运⾏其他程序
除了使⽤os.system()函数外,还可以使⽤win32api模块中的ShellExecute()函数来运⾏其他程序,格式如下:
ShellExecute(hwnd, op, file, args, dir, show)
hwnd: ⽗窗⼝的句柄,如果没有⽗窗⼝,则为0
op : 要运⾏的操作,为open,print或者为空
file: 要运⾏的程序,或者打开的脚本
args: 要向程序传递的参数,如果打开的是⽂件则为空
dir : 程序初始化的⽬录
show: 是否显⽰窗⼝
⽰例如下:
1. >>> import win32api
2. >>> win32api.ShellExecute(0, 'open', '', '', '', 0) # 后台执⾏
3. >>> win32api.ShellExecute(0, 'open', '', '', '', 1) # 前台打开
4. >>> win32api.ShellExecute(0, 'open', '', '1.txt', '', 1) # 打开⽂件
5. >>> win32api.ShellExecute(0, 'open', 'www.sohu', '', '', 1) # 打开⽹页
6. >>> win32api.ShellExecute(0, 'open', 'D:\\Opera.mp3', '', '', 1) # 播放视频
7. >>> win32api.ShellExecute(0, 'open', 'D:\\hello.py', '', '', 1) # 运⾏程序
使⽤ShellExecute函数,就相当于在资源管理器中双击⽂件图标,系统会打开相应程序运⾏。
NOTE:
【⽅式三】使⽤ShellExecute函数运⾏其他程序
创建进程:
为了便于控制通过脚本运⾏的程序,可以使⽤win32process模块中的CreateProcess()函数创建
⼀个运⾏相应程序的进程。其函数格式为:
CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr) appName 可执⾏⽂件名
cmdLine 命令⾏参数
procAttr 进程安全属性
threadAttr 线程安全属性
InheritHandle 继承标志
CreationFlags 创建标志
currentDir 进程的当前⽬录
Attr 创建程序的属性
⽰例如下:
1. >>> win32process.CreateProcess('C:\\Windows\\', '', None, None, 0, win32process.CREATE_NO_WINDOW,
2. None, None, win32process.STARTUPINFO())
3. (<PyHANDLE:892>, <PyHANDLE:644>, 21592, 18780) # 函数返回进程句柄、线程句柄、进程ID以及线程ID
结束进程:
可以使⽤win32process.TerminateProcess函数来结束已创建的进程, 函数格式如下:
TerminateProcess(handle, exitCode)
handle 要操作的进程句柄
exitCode 进程退出代码
或者使⽤win32event.WaitForSingleObject等待创建的线程结束,函数格式如下:
WaitForSingleObject(handle, milisecond)
handle : 要操作的进程句柄
milisecond: 等待的时间,如果为-1,则⼀直等待.
⽰例如下:
1. >>> import win32process
2. >>> handle = win32process.CreateProcess('C:\\Windows\\', '', None, None, 0, win32process
3. .CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 打开记事本,获得其句柄
createprocessa4. >>> win32process.TerminateProcess(handle[0], 0) # 终⽌进程
5. 或者
6. >>> import win32event
7. >>> handle = win32process.CreateProcess('C:\\Windows\\', '', None, None, 0,
8. win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 创建进程获得句柄
9. >>> win32event.WaitForSingleObject(handle[0], -1) # 等待进程结束
10. 0 # 进程结束返回值
【⽅式四】使⽤ctypes调⽤kernel32.dll中的函数
使⽤ctypes模块可以让Python调⽤位于动态链接库的函数。
ctypes模块为Python提供了调⽤动态链接库中函数的功能。使⽤ctypes模块可以⽅便地调⽤由C语⾔编写的动态链接库,并向其传递参数。ctypes模块定义了C语⾔中的基本数据类型,并且可以实现C语⾔中的结构体和联合体。ctypes模块可以⼯作在Windows,Linux,Mac OS等多种操作系统,基本上实现了跨平台。
⽰例:
Windows下调⽤user32.dll中的MessageBoxA函数。
1. >>> from ctypes import *
2. >>> user32 = windll.LoadLibrary('user32.dll')
3. >>> user32.MessageBoxA(0, de('Ctypes is so smart!'), de('Ctypes'), 0)
4. 1
ctype模块中含有的基本类型与C语⾔类似,下⾯是⼏个基本的数据类型的对照:
---------------------------------------
Ctypes数据类型 C数据类型
---------------------------------------
c_char char
c_short short
c_int int
c_long long
c_float float
c_doule double
c_void_p void *
---------------------------------------
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论