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程序实例(通讯录)
Nov 29 Python
python通过ssh-powershell监控windows的方法
Jun 02 Python
Django中URLconf和include()的协同工作方法
Jul 20 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
Python实现求数列和的方法示例
Jan 12 Python
python绘制热力图heatmap
Mar 23 Python
对python中基于tcp协议的通信(数据传输)实例讲解
Jul 22 Python
python3操作注册表的方法(Url protocol)
Feb 05 Python
OpenCV+python实现实时目标检测功能
Jun 24 Python
Python第三方库安装缓慢的解决方法
Feb 06 Python
如何使用PyCharm及常用配置详解
Jun 03 Python
手残删除python之后的补救方法
Jun 26 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
PHP抽象类 介绍
2012/06/13 PHP
php操作xml入门之xml标签的属性分析
2015/01/23 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
2015/02/12 PHP
PHP添加文字水印或图片水印的水印类完整源代码与使用示例
2019/03/18 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
js中eval详解
2012/03/30 Javascript
js输出阴历、阳历、年份、月份、周示例代码
2014/01/29 Javascript
jquery序列化表单以及回调函数的使用示例
2014/07/02 Javascript
jQuery的animate函数学习记录
2014/08/08 Javascript
CSS3实现动态背景登录框的代码
2015/07/28 Javascript
浅谈JS继承_寄生式继承 &amp; 寄生组合式继承
2016/08/16 Javascript
AngularJs入门教程之环境搭建+创建应用示例
2016/11/01 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
js以分隔符分隔数组中的元素并转换为字符串的方法
2016/11/16 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
JS实现点击复选框变更DIV显示状态的示例代码
2017/12/18 Javascript
微信小程序如何像vue一样在动态绑定类名
2018/04/17 Javascript
vue上传图片到oss的方法示例(图片带有删除功能)
2018/09/27 Javascript
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
Node中对非阻塞I/O、事件循环的知识点总结
2020/01/05 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
深入分析python 排序
2020/08/24 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
师范毕业生求职自荐信
2013/09/25 职场文书
某某同志考察材料
2014/05/28 职场文书
公证委托书标准格式
2014/09/11 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
债务纠纷起诉书
2015/05/20 职场文书
八月迷情观后感
2015/06/11 职场文书
Go获取两个时区的时间差
2022/04/20 Golang
python热力图实现的完整实例
2022/06/25 Python