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 相关文章推荐
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
python 回调函数和回调方法的实现分析
Mar 23 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
Apr 18 Python
python实现简单淘宝秒杀功能
May 03 Python
python实现字符串和字典的转换
Sep 29 Python
python实现超市商品销售管理系统
Oct 25 Python
python列表推导式操作解析
Nov 26 Python
使用Python实现牛顿法求极值
Feb 10 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
python图片合成的示例
Nov 09 Python
Python中pass的作用与使用教程
Nov 13 Python
字典算法实现及操作 --python(实用)
Mar 31 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
模拟OICQ的实现思路和核心程序(二)
2006/10/09 PHP
php生成不重复随机数、数组的4种方法分享
2015/03/30 PHP
PHP错误处理函数
2016/04/03 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
PHP入门教程之使用Mysqli操作数据库的方法(连接,查询,事务回滚等)
2016/09/11 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
2019/02/28 PHP
jquery tab插件制作实现代码
2010/06/22 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
javascript删除html标签函数cIsHTML
2017/01/09 Javascript
微信小程序实现image组件图片自适应宽度比例显示的方法
2018/01/16 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
[35:34]Liquid vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
利用Python循环(包括while&for)各种打印九九乘法表的实例
2017/11/06 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
python3+PyQt5实现柱状图
2018/04/24 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
在Python中使用MySQL--PyMySQL的基本使用方法
2019/11/19 Python
python实现udp聊天窗口
2020/03/31 Python
Python logging模块进行封装实现原理解析
2020/08/07 Python
HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题
2021/01/19 HTML / CSS
Myprotein蛋白粉美国官网:欧洲畅销运动营养品牌
2016/11/15 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
启动一个线程是用run()还是start()
2016/12/25 面试题
几个判断型的面试题
2012/07/03 面试题
《莫泊桑拜师》教学反思
2014/04/23 职场文书
主持人演讲稿
2014/05/13 职场文书
2016大学迎新欢迎词
2015/09/29 职场文书
Django中的JWT身份验证的实现
2021/05/07 Python
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS