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 相关文章推荐
python操作MySQL数据库具体方法
Oct 28 Python
python基础教程之udp端口扫描
Feb 10 Python
python字符串替换示例
Apr 24 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
Python中返回字典键的值的values()方法使用
May 22 Python
Python实现将SQLite中的数据直接输出为CVS的方法示例
Jul 13 Python
Python实现的密码强度检测器示例
Aug 23 Python
浅谈Python3 numpy.ptp()最大值与最小值的差
Aug 24 Python
使用Pandas的Series方法绘制图像教程
Dec 04 Python
python3中sorted函数里cmp参数改变详解
Mar 12 Python
python matplotlib包图像配色方案分享
Mar 14 Python
Python 实现3种回归模型(Linear Regression,Lasso,Ridge)的示例
Oct 15 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
set_include_path在win和linux下的区别
2008/01/10 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
JS对象与JSON格式数据相互转换
2012/02/20 Javascript
Jquery创建一个层当鼠标移动到层上面不消失效果
2013/12/12 Javascript
Angularjs注入拦截器实现Loading效果
2015/12/28 Javascript
Vue结合后台导入导出Excel问题详解
2019/02/19 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
JS实现放大镜效果
2020/09/21 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
2020/11/17 Javascript
JavaScript async/await原理及实例解析
2020/12/02 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[47:36]Optic vs Newbee 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:00:11]DOTA2-DPC中国联赛 正赛 CDEC vs DLG BO3 第一场 2月7日
2021/03/11 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
跟老齐学Python之有容乃大的list(1)
2014/09/14 Python
python爬取微信公众号文章
2018/08/31 Python
python将秒数转化为时间格式的实例
2018/09/16 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
python获取当前文件路径以及父文件路径的方法
2019/07/10 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python scipy卷积运算的实现方法
2019/09/16 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
CSS3盒子模型详解
2013/04/24 HTML / CSS
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
DataReader和DataSet的异同
2014/12/31 面试题
应届生求职信写作技巧
2013/10/24 职场文书
学前班评语大全
2014/05/04 职场文书
家长会主持词开场白
2015/05/29 职场文书
委托收款证明
2015/06/23 职场文书
运动员入场词
2015/07/18 职场文书
全国劳模先进事迹材料(2016精选版)
2016/02/25 职场文书
详解OpenCV曝光融合
2022/04/29 Python