Python实现运行其他程序的四种方式实例分析


Posted in Python onAugust 17, 2017

本文实例讲述了Python实现运行其他程序的四种方式。分享给大家供大家参考,具体如下:

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码。为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数.

【方式一】使用os.system()函数运行其他程序

os模块中的system()函数可以方便地运行其他程序或者脚本,模式如下:

os.system(command)

command: 要执行的命令,如果要向脚本传递参数,可以使用空格分割程序及多个参数。

示例如下:

>>> import os
>>> os.system('notepad')    # 打开记事本程序.
0
>>> os.system('notepad 1.txt') # 打开1.txt文件,如果不存在,则创建.
0

【方式二】使用ShellExecute函数运行其他程序

除了使用os.system()函数外,还可以使用win32api模块中的ShellExecute()函数来运行其他程序,格式如下:

ShellExecute(hwnd, op, file, args, dir, show)

hwnd:          父窗口的句柄,如果没有父窗口,则为0
op  :          要运行的操作,为open,print或者为空
file:          要运行的程序,或者打开的脚本
args:          要向程序传递的参数,如果打开的是文件则为空
dir :          程序初始化的目录
show:          是否显示窗口

示例如下:

>>> import win32api
>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)      # 后台执行
>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)      # 前台打开
>>> win32api.ShellExecute(0, 'open', 'notepad.exe', '1.txt', '', 1)   # 打开文件
>>> win32api.ShellExecute(0, 'open', 'http://www.sohu.com', '', '', 1)  # 打开网页
>>> win32api.ShellExecute(0, 'open', 'D:\\Opera.mp3', '', '', 1)     # 播放视频
>>> win32api.ShellExecute(0, 'open', 'D:\\hello.py', '', '', 1)     # 运行程序

使用ShellExecute函数,就相当于在资源管理器中双击文件图标,系统会打开相应程序运行。

NOTE:

win32api安装 http://sourceforge.net/projects/pywin32/files/pywin32/ 因我的是64的操作系统,所以下载了这个:pywin32-216.win-amd64-py2.7

【方式三】使用ShellExecute函数运行其他程序

创建进程:

为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建

一个运行相应程序的进程。其函数格式为:

CreateProcess(appName, cmdLine, proAttr, threadAttr, InheritHandle, CreationFlags, newEnv, currentDir, Attr)

appName         可执行文件名
cmdLine         命令行参数
procAttr        进程安全属性
threadAttr      线程安全属性
InheritHandle  继承标志
CreationFlags  创建标志
currentDir      进程的当前目录
Attr             创建程序的属性

示例如下:

>>> win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW,
None, None, win32process.STARTUPINFO())
(<PyHANDLE:892>, <PyHANDLE:644>, 21592, 18780) # 函数返回进程句柄、线程句柄、进程ID以及线程ID

结束进程:

可以使用win32process.TerminateProcess函数来结束已创建的进程, 函数格式如下:

TerminateProcess(handle, exitCode)

handle     要操作的进程句柄
exitCode   进程退出代码

或者使用win32event.WaitForSingleObject等待创建的线程结束,函数格式如下:

WaitForSingleObject(handle, milisecond)

handle     : 要操作的进程句柄
milisecond: 等待的时间,如果为-1,则一直等待.

示例如下:

>>> import win32process
>>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process
.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())      # 打开记事本,获得其句柄
>>> win32process.TerminateProcess(handle[0], 0)            # 终止进程

或者

>>> import win32event
>>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0,
win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 创建进程获得句柄
>>> win32event.WaitForSingleObject(handle[0], -1)           # 等待进程结束
0                                   # 进程结束返回值

【方式四】使用ctypes调用kernel32.dll中的函数

使用ctypes模块可以让Python调用位于动态链接库的函数。

ctypes模块为Python提供了调用动态链接库中函数的功能。使用ctypes模块可以方便地调用由C语言编写的动态链接库,并向其传递参数。ctypes模块定义了C语言中的基本数据类型,并且可以实现C语言中的结构体和联合体。ctypes模块可以工作在Windows,Linux,Mac OS等多种操作系统,基本上实现了跨平台。

示例:

Windows下调用user32.dll中的MessageBoxA函数。

>>> from ctypes import *
>>> user32 = windll.LoadLibrary('user32.dll')
>>> user32.MessageBoxA(0, str.encode('Ctypes is so smart!'), str.encode('Ctypes'), 0)
1

Python实现运行其他程序的四种方式实例分析

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 *
---------------------------------------

更多关于Python相关内容可查看本站专题:《Python函数使用技巧总结》、《Python数据结构与算法教程》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
使用scrapy实现爬网站例子和实现网络爬虫(蜘蛛)的步骤
Jan 23 Python
python学习笔记:字典的使用示例详解
Jun 13 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
Apr 15 Python
Python排序搜索基本算法之归并排序实例分析
Dec 08 Python
Python使用 Beanstalkd 做异步任务处理的方法
Apr 24 Python
Python实现字符串的逆序 C++字符串逆序算法
May 28 Python
对tf.reduce_sum tensorflow维度上的操作详解
Jul 26 Python
python 计算平均平方误差(MSE)的实例
Jun 29 Python
Python3并发写文件与Python对比
Nov 20 Python
pyinstaller打包找不到文件的问题解决
Apr 15 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
Jan 12 Python
Python实现位图分割的效果
Nov 20 Python
python进阶_浅谈面向对象进阶
Aug 17 #Python
Python 比较两个数组的元素的异同方法
Aug 17 #Python
python使用opencv读取图片的实例
Aug 17 #Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 #Python
python3.4下django集成使用xadmin后台的方法
Aug 15 #Python
Django 如何获取前端发送的头文件详解(推荐)
Aug 15 #Python
socket + select 完成伪并发操作的实例
Aug 15 #Python
You might like
打造计数器DIY三步曲(中)
2006/10/09 PHP
浅析php过滤html字符串,防止SQL注入的方法
2013/07/02 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
利用phpexcel把excel导入数据库和数据库导出excel实现
2014/01/09 PHP
php实现utf-8转unicode函数分享
2015/01/06 PHP
Aster vs Newbee BO5 第一场2.19
2021/03/10 DOTA
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
Jquery ajax加载等待执行结束再继续执行下面代码操作
2015/11/24 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
vue.js中过滤器的使用教程
2017/06/08 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
2017/11/17 Javascript
Angular项目如何升级至Angular6步骤全纪录
2018/09/03 Javascript
vue获取时间戳转换为日期格式代码实例
2019/04/17 Javascript
Vue实现购物车的全选、单选、显示商品价格代码实例
2019/05/06 Javascript
JavaScript实现拖拽和缩放效果
2020/08/24 Javascript
Python的动态重新封装的教程
2015/04/11 Python
python中pygame针对游戏窗口的显示方法实例分析(附源码)
2015/11/11 Python
Python爬虫包BeautifulSoup学习实例(五)
2018/06/17 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Django中使用Celery的方法示例
2018/11/29 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
让你的Python代码实现类型提示功能
2019/11/19 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
python 5个顶级异步框架推荐
2020/09/09 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
do you have any Best Practice for testing
2016/06/04 面试题
高二英语教学反思
2014/01/19 职场文书
运动会通讯稿400字
2014/01/28 职场文书
优秀毕业生事迹材料
2014/02/12 职场文书
《赵州桥》教学反思
2014/02/17 职场文书
大型会议策划方案
2014/05/17 职场文书
老干部工作汇报材料
2014/10/28 职场文书
爱的教育读书笔记
2015/06/26 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python