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 中 list 的各项操作技巧
Apr 13 Python
python高阶爬虫实战分析
Jul 29 Python
python解析json串与正则匹配对比方法
Dec 20 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
树莓派采用socket方式文件传输(python)
Jun 22 Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 Python
如何基于python生成list的所有的子集
Nov 11 Python
Python:__eq__和__str__函数的使用示例
Sep 26 Python
Python中pass的作用与使用教程
Nov 13 Python
python xlsxwriter模块的使用
Dec 24 Python
python中pandas.read_csv()函数的深入讲解
Mar 29 Python
Python OpenGL基本配置方式
May 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
Laravel 5.3 学习笔记之 配置
2016/08/28 PHP
yii2.0框架多模型操作示例【添加/修改/删除】
2020/04/13 PHP
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
jQuery插件jQuery-JSONP开发ajax调用使用注意事项
2013/11/22 Javascript
javascript记录文本框内文字个数检测文字个数变化
2014/10/14 Javascript
js实现进度条的方法
2015/02/13 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
vue 2.0项目中如何引入element-ui详解
2017/09/06 Javascript
jQuery事件对象的属性和方法详解
2017/09/09 jQuery
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 字符串中的字符倒转
2008/09/06 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python编程中使用Pillow来处理图像的基础教程
2015/11/20 Python
解决python3 json数据包含中文的读写问题
2018/05/10 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python快速编写单行注释多行注释的方法
2019/07/31 Python
python 实现目录复制的三种小结
2019/12/04 Python
win10下opencv-python特定版本手动安装与pip自动安装教程
2020/03/05 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
运动服饰每月订阅盒:Ellie
2018/04/29 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
十佳大学生村官事迹
2014/01/09 职场文书
社区巾帼文明岗事迹材料
2014/06/03 职场文书
2015大学生入党个人自传
2015/06/26 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
不会写演讲稿,快来看看这篇文章!
2019/08/06 职场文书