Python中调用其他程序的方式详解


Posted in Python onAugust 06, 2019

前言

在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码。为了更好地控制运行的进程,

可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数。下面介绍4种方式:

1、os.system()函数

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

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

实例:

#打开记事本
os.system('notepad')
#用记事本打开aa.txt
os.system('notepad aa.txt') #aa.txt文件必须在当前程序目录
#直接打开aa.txt
os.system('aa.txt')
#直接打开Excel文件
os.system('aa.xlsx')
#直接打开Word文件
os.system('bb.docx')
filepath='测试.xlsx'
#打开包含中文的文件
os.system(filepath.decode('utf8').encode('GBK'))

2、ShellExecute函数

使用win32api模块中的ShellExecute()函数来运行其他程序,格式如下

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

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

引用win32api,需要安装 pywin32,  https://sourceforge.net/projects/pywin32/files/pywin32/

实例:

import win32api
win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)   # 后台执行
win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)   # 前台打开
win32api.ShellExecute(0, 'open', 'notepad.exe', 'wmi.txt', '', 1)  # 打开文件
win32api.ShellExecute(0, 'open', 'iexplore.exe', '', '', 1)    # 打开IE浏览器
win32api.ShellExecute(0, 'open', 'iexplore.exe', 'https://www.baidu.com/', '', 1) # 用IE浏览器打开百度网址
win32api.ShellExecute(0, 'open', 'mspaint.exe', 'wxqr.png', '', 1) #用系统附件自带的画图打开图片wxqr.png

3、CreateProcess

参考实例:https://www.programcreek.com/python/example/8489/win32process.CreateProcess

3.1、创建进程

为了便于控制通过脚本运行的程序,可以使用win32process模块中的CreateProcess()函数创建一个运行相应程序的进程。其函数格式为:

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

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

3.2、结束进程

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

TerminateProcess(handle, exitCode)

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

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

WaitForSingleObject(handle, milisecond)

  • handle : 要操作的进程句柄
  • milisecond: 等待的时间,如果为-1,则一直等待.
import win32process
# 打开记事本,获得其句柄
handle = win32process.CreateProcess(r'C:\Windows\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())
time.sleep(4)
# 终止进程
win32process.TerminateProcess(handle[0], 0)
import win32event
#等待进程结束 
print win32event.WaitForSingleObject(handle[0], -1)

4、使用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')
a = user32.MessageBoxA(0, str.encode('Hello Ctypes!'), str.encode('Ctypes'), 0)
print a

Python中调用其他程序的方式详解

ctype模块中含有的基本类型与C语言类似,下面是几个基本的数据类型的对照:

Python中调用其他程序的方式详解

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python脚本实现集群检测和管理功能
Mar 06 Python
python实现线程池的方法
Jun 30 Python
python实现两个文件合并功能
Apr 01 Python
Python中捕获键盘的方式详解
Mar 28 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
详解Python静态网页爬取获取高清壁纸
Apr 23 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
Aug 12 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
django中的数据库迁移的实现
Mar 16 Python
Python用类实现扑克牌发牌的示例代码
Jun 01 Python
pytorch随机采样操作SubsetRandomSampler()
Jul 07 Python
运用PyTorch动手搭建一个共享单车预测器
Aug 06 #Python
基于python实现自动化办公学习笔记(CSV、word、Excel、PPT)
Aug 06 #Python
django将数组传递给前台模板的方法
Aug 06 #Python
Python实现时间序列可视化的方法
Aug 06 #Python
python 模拟银行转账功能过程详解
Aug 06 #Python
Python 3 判断2个字典相同
Aug 06 #Python
django 控制页面跳转的例子
Aug 06 #Python
You might like
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
jquery实现微博文字输入框 输入时显示输入字数 效果实现
2013/07/12 Javascript
javascript中处理时间戳为日期格式的方法
2014/01/02 Javascript
javascript获取flash版本号的方法
2014/11/20 Javascript
javascript中的遍历for in 以及with的用法
2014/12/22 Javascript
arguments对象验证函数的参数是否合法
2015/06/26 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
2016/12/14 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
使用vue-cli创建项目的图文教程(新手入门篇)
2018/05/02 Javascript
微信小程序实现自上而下字幕滚动
2018/07/14 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
2020/11/11 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
Python open读写文件实现脚本
2008/09/06 Python
numpy找出array中的最大值,最小值实例
2018/04/03 Python
Python3爬楼梯算法示例
2019/03/04 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
基于pandas中expand的作用详解
2019/12/17 Python
Python变量作用域LEGB用法解析
2020/02/04 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
使用keras和tensorflow保存为可部署的pb格式
2020/05/25 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
瑞典廉价机票预订网站:Seat24
2018/06/19 全球购物
市场营销毕业生自荐信
2013/11/23 职场文书
企业总经理岗位职责
2014/02/13 职场文书
法务专员岗位职责
2015/02/14 职场文书
《7的乘法口诀》教学反思
2016/02/18 职场文书
Python必备技巧之函数的使用详解
2022/04/04 Python