Python中四种运行其他程序的方式
原文地址:http://blog.csdn.net/jerry_1126/article/details/46584179
在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
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中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32proc ...
- JavaScript中四种不同的属性检测方式比较
JavaScript中四种不同的属性检测方式比较 1. 用in方法 var o = {x:1}; "x" in o; //true "y" in o; //fa ...
- Python中四种样式的99乘法表
1.常规型. #常规型 i=1 while i<=9: j=1 while j<=i: print(''%d*%d=%2d''%(i,j,i*j),end='') i+=1 #等号只是用来 ...
- Scrapy:运行爬虫程序的方式
Windows 10家庭中文版,Python 3.6.4,Scrapy 1.5.0, 在创建了爬虫程序后,就可以运行爬虫程序了.Scrapy中介绍了几种运行爬虫程序的方式,列举如下: -命令行工具之s ...
- Java中四种引用:强、软、弱、虚引用
这篇文章非常棒:http://alinazh.blog.51cto.com/5459270/1276173 Java中四种引用:强.软.弱.虚引用 1.1.强引用当我们使用new 这个关键字创建对象时 ...
- java中四种引用类型
java中四种引用类型 今天看代码,里面有一个类java.lang.ref.SoftReference把小弟弄神了,试想一下,接触java已经有3年了哇,连lang包下面的类都不了解,怎么混.后来在 ...
- c++ --> c++中四种类型转换方式
c++中四种类型转换方式 c风格转换的格式很简单(TYPE)EXPRESSION,但是c风格的类型转换有不少缺点, 1)它可以在任意类型之间转换,比如你可以把一个指向const对象的指针转换成指向 ...
- C#中四种常用集合的运用(非常重要)
C#中4个常用的集合 1.ArrayList ArrayList类似于数组,有人也称它为数组列表.ArrayList可以动态维护,而数组的容量是固定的. 它的索引会根据程序的扩展而重新进行分配和调整. ...
- C++中四种类型转换以及const_cast是否能改变常量的问题
we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...
随机推荐
- EF5+MVC4系列(5) 删除的方法 1:系统推荐的先查询后remove删除的方法 2:自己new一个包含主键的类,然后 attach附加 remove删除;3:使用db.Entry 修改状态删除4:EntityState的几种状态
我们还是以订单表为例 1:系统推荐的方法,先查询出来,然后调用remove方法进行删除 我们删除id大于等于4的 static void Main(string[] args) { Delet ...
- 垃圾回收机制GC知识再总结兼谈如何用好GC(其他信息: 内存不足)
来源 图像操作,易内存泄露,边界像素 一.为什么需要GC 应用程序对资源操作,通常简单分为以下几个步骤: 1.为对应的资源分配内存 2.初始化内存 3.使用资源 4.清理资源 5.释放内存 应用程序对 ...
- u3d fpsCounter
因为u3d自己的stats下面的fpscounter不是实际意义上的fps,所以看到demo的fpsCounter,把它改写为c#的 using UnityEngine;using System.Co ...
- Xcode 文档注释
首先要下载一个服务:[下载地址]这是一个老外写的工作流,解压缩,然后双击,安装一下, 选择xcode —> services —> services perference 安装完就会在右边 ...
- js url?callback=xxx xxx的介绍
由于安全的原因,浏览器做了很多方面的工作,由此也就引入了一系列的跨域问题,需要注意的是: 跨域并非浏览器限制了发起跨站请求,而是跨站请求可以正常发起,但是返回结果被浏览器拦截了.最好的例子是 CSRF ...
- 使用 ML Pipeline 构建机器学习工作流
http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice5/
- Spring AOP的日志记录
现在的项目是Spring+MyBatis,前段时间项目经理让我干了一个活,就是给所有的controller里的所有方法加上日志记录的代码,其实没有多少,也就300来个方法,也没有抱怨什么,一边打着瞌睡 ...
- 【python】并行化的又一种思路
https://segmentfault.com/a/1190000000414339
- 【Ubuntu】录屏软件
http://www.leesven.com/2378.html sudo apt-get install kazam
- wordpress主题升级之后返回到原来版本主题的方法
wordpress后台经常可以看到主题提示升级,但是发现升级之后样式,颜色等都变了,不是以前的样子了,这时候如果想要返回到以前版本,前提,必须以前版本有备份. 在wordpress里面找到主题===添 ...