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多进程分块读取超大文件的方法
Apr 13 Python
Python实现统计文本文件字数的方法
May 05 Python
Python工程师面试必备25条知识点
Jan 17 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
深入浅析Python获取对象信息的函数type()、isinstance()、dir()
Sep 17 Python
由Python编写的MySQL管理工具代码实例
Apr 09 Python
python 随机森林算法及其优化详解
Jul 11 Python
django Admin文档生成器使用详解
Jul 22 Python
提升Python效率之使用循环机制代替递归函数
Jul 23 Python
python开发入门——set的使用
Sep 03 Python
Python爬虫过程解析之多线程获取小米应用商店数据
Nov 14 Python
Pytorch 中net.train 和 net.eval的使用说明
May 22 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
PHP的构造方法,析构方法和this关键字详细介绍
2013/10/22 PHP
php过滤html中的其他网站链接的方法(域名白名单功能)
2014/04/24 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
javascript eval函数深入认识
2009/02/21 Javascript
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
jQuery弹性滑动导航菜单实现思路及代码
2013/05/02 Javascript
jquery scrollTop方法根据滚动像素显示隐藏顶部导航条
2013/05/27 Javascript
JS返回上一页实例代码通过图片和按钮分别实现
2013/08/16 Javascript
原生JS实现加入收藏夹的代码
2013/10/24 Javascript
Bootstrap框架的学习教程详解(二)
2016/10/18 Javascript
jQuery Mobile和HTML5开发App推广注册页
2016/11/07 Javascript
jquery插件开发之选项卡制作详解
2017/08/30 jQuery
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
Vue中render函数的使用方法
2018/01/31 Javascript
js实现双人五子棋小游戏
2020/05/28 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
python实现按行切分文本文件的方法
2016/04/18 Python
Python线程创建和终止实例代码
2018/01/20 Python
详解Python静态网页爬取获取高清壁纸
2019/04/23 Python
django的ORM操作 删除和编辑实现详解
2019/07/24 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python Scrapy框架原理解析
2021/01/04 Python
CSS3字体效果的设置方法小结
2016/06/13 HTML / CSS
HTML5实现表单自动验证功能实例代码
2017/01/11 HTML / CSS
Superdry极度乾燥官网:日本街头风格,纯英国制造品牌
2016/10/31 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
环境工程求职简历的自我评价范文
2013/10/24 职场文书
大学校庆邀请函
2014/01/11 职场文书
搞笑创意广告语
2014/03/17 职场文书
自动化专业毕业生求职信
2014/06/18 职场文书
使用Python开发贪吃蛇游戏 SnakeGame
2022/04/30 Python