在Python中,可以方便地使用os模块来运行其他脚本或者程序,这样就可以在脚本中直接使用其他脚本或程序提供的功能,而不必再次编写实现该功能的代码。为了更好地控制运行的进程,可以使用win32process模块中的函数,如果想进一步控制进程,则可以使用ctype模块,直接调用kernel32.dll中的函数.

【方式一】使用os.system()函数运行其他程序

现在应该是苏北press.popen()这个取代上面的函数,感觉很好用,尤其,程序调用程序,出现黑屏现象

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

os.system(command)

  • command: 要执行的命令,如果要向脚本传递参数,可以使用空格分割程序及多个参数。
  1. >>> import os
  2. >>> os.system('notepad')       # 打开记事本程序.
  3. 0
  4. >>> os.system('notepad 1.txt') # 打开1.txt文件,如果不存在,则创建.
  5. 0

【方式二】使用ShellExecute函数运行其他程序

除了使用os.system()函数外,还可以使用win32api模块中的ShellExecute()函数来运行其他程序,格式如下:
ShellExecute(hwnd, op, file, args, dir, show)

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

示例如下:

  1. >>> import win32api
  2. >>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 0)           # 后台执行
  3. >>> win32api.ShellExecute(0, 'open', 'notepad.exe', '', '', 1)           # 前台打开
  4. >>> win32api.ShellExecute(0, 'open', 'notepad.exe', '1.txt', '', 1)      # 打开文件
  5. >>> win32api.ShellExecute(0, 'open', 'http://www.sohu.com', '', '', 1)   # 打开网页
  6. >>> win32api.ShellExecute(0, 'open', 'D:\\Opera.mp3', '', '', 1)         # 播放视频
  7. >>> win32api.ShellExecute(0, 'open', 'D:\\hello.py', '', '', 1)          # 运行程序

带参数启动ie

win32api.ShellExecute(0, 'open', 程序名, url, 初始化目录, 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             创建程序的属性

示例如下:

  1. >>> win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process.CREATE_NO_WINDOW,
  2. None, None, win32process.STARTUPINFO())
  3. (<PyHANDLE:892>, <PyHANDLE:644>, 21592, 18780) # 函数返回进程句柄、线程句柄、进程ID以及线程ID

结束进程:

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

TerminateProcess(handle, exitCode)

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

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

WaitForSingleObject(handle, milisecond)handle     : 要操作的进程句柄

    • milisecond: 等待的时间,如果为-1,则一直等待.

示例如下:

  1. >>> import win32process
  2. >>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0, win32process
  3. .CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO())            # 打开记事本,获得其句柄
  4. >>> win32process.TerminateProcess(handle[0], 0)                       # 终止进程
  5. 或者
  6. >>> import win32event
  7. >>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe', '', None, None, 0,
  8. win32process.CREATE_NO_WINDOW, None, None, win32process.STARTUPINFO()) # 创建进程获得句柄
  9. >>> win32event.WaitForSingleObject(handle[0], -1)                      # 等待进程结束
  10. 0                                                                      # 进程结束返回值

【方式四】使用ctypes调用kernel32.dll中的函数

使用ctypes模块可以让Python调用位于动态链接库的函数。

ctypes模块为Python提供了调用动态链接库中函数的功能。使用ctypes模块可以方便地调用由C语言编写的动态链接库,并向其传递参数。ctypes模块定义了C语言中的基本数据类型,并且可以实现C语言中的结构体和联合体。ctypes模块可以工作在Windows,Linux,Mac OS等多种操作系统,基本上实现了跨平台。

示例:

Windows下调用user32.dll中的MessageBoxA函数。

    1. >>> from ctypes import *
    2. >>> user32 = windll.LoadLibrary('user32.dll')
    3. >>> user32.MessageBoxA(0, str.encode('Ctypes is so smart!'), str.encode('Ctypes'), 0)
    4. 1

总结:个人感觉启动exe还是方法2比较好用,跟鼠标双击差不多,傻瓜调用,应该起来的关联文件都能起来,其他方式会出现一些BUG

python 启动外部程序四种方法的更多相关文章

  1. Python单例模式的四种方法

    在这之前,先了解super()和__new__()方法 super()方法: 返回一个父类或兄弟类类型的代理对象,让你能够调用一些从继承过来的方法. 它有两个典型作用: a. 在单继承的类层次结构中, ...

  2. Python遍历List集合四种方法

    这篇文章主要介绍了Python 列表(List) 的四种遍历方法实例 详解的相关资料,需要的朋友可以参考下 分别是:直接遍历对象 通过索引遍历 通过enumerate方法 通过iter方法. 使用Py ...

  3. Win11怎么启动任务管理器?Win11启动任务管理器的四种方法

    Win11怎么启动任务管理器?小编为大家带来了Win11启动任务管理器的四种方法,感兴趣的朋友一起看看吧 任务管理器是Windows系统中一项非常实用的功能.不过在最新版Win11中,右击任务栏启动任 ...

  4. python QQTableView中嵌入复选框CheckBox四种方法

    搜索了一下,QTableView中嵌入复选框CheckBox方法有四种: 第一种不能之前显示,必须双击/选中后才能显示,不适用. 第二种比较简单,通常用这种方法. 第三种只适合静态显示静态数据用 第四 ...

  5. 获取当前页面的所有链接的四种方法对比(python 爬虫)

    ''' 得到当前页面所有连接 ''' import requests import re from bs4 import BeautifulSoup from lxml import etree fr ...

  6. linux下配置ip地址四种方法(图文方法)

    主要是用第四种方法 (1)Ifconfig命令  第一种使用ifconfig命令配置网卡的ip地址.此命令通常用来零时的测试用,计算机启动后 ip地址的配置将自动失效.具体用法如下.Ipconfig  ...

  7. C#播放声音的四种方法 +AxWindowsMediaPlayer的详细用法

    C#播放声音的四种方法 第一种是利用DirectX 1.安装了DirectX SDK(有9个DLL文件).这里我们只用到MicroSoft.DirectX.dll和 Microsoft.Directx ...

  8. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

  9. (转载)eclipse插件安装的四种方法

    eclipse插件安装的四种方法 Eclipse插件的安装方法 1.在eclipse的主目录(ECLIPSE_HOME, 比如在我的机器上安装的目录是:D:\eclipse)有一个plugins的目录 ...

  10. linux安装IPython四种方法

    IPython是Python的交互式Shell,提供了代码自动补完,自动缩进,高亮显示,执行Shell命令等非常有用的特性.特别是它的代码补完功能,例如:在输入zlib.之后按下Tab键,IPytho ...

随机推荐

  1. 20220719 第七组 陈美娜 Java(this,封装,构造器概念)

    1.关于构造器 如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器 如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值 2.this关键字 this代表的是当前类的对象,thi ...

  2. ceph PG 故障状态

    PG 故障状态 Creating(创建中)在创建POOL时,需要指定PG的数量,此时PG的状态便处于creating,意思是Ceph正在创建PG Peering(互联中)peering的作用主要是在P ...

  3. ROS2踩坑记录

    在Windows10的WSL2中的Ubuntu22.04子系统中安装ros2 humble版本. 官方文档http://docs.ros.org/en/humble/Installation/Ubun ...

  4. Activity基础知识

    Activity 一.Activity是什么 Activity是一种可以包含用户界面的组件,主要用于和用户进行交互.一个应用程序可以包含零个或多个活动. 二.活动的基本用法 1. 手动创建活动 ​ 打 ...

  5. 20193314 白晨阳 实验三 Socket编程技术

    学号 2019-2020-2 <Python程序设计>实验三报告 课程:<Python程序设计> 班级: 201933 姓名: 白晨阳 学号: 20193314 实验教师:王志 ...

  6. Checkmarx

    1.概述 CheckMarx:是以色列的一家高科技软件公司,也是世界上最著名的源代码安全扫描软件CheckmarxCxSuite的生产商. Checkmarx CxEnterprise(Checkma ...

  7. K8s+Docker 学习笔记系列

    学前知识 你需要掌握 Linux 的常用命令.你可以通过Linux 教程 来学习相关命令. Docker应用场景 Web 应用的自动化打包和发布. 自动化测试和持续集成.发布. 在服务型环境中部署和调 ...

  8. ctype.h系列的字符函数

    C有一系列专门处理字符的函数,ctype.h头文件包含了这些函数的原型.这些函数接受一个字符作为参数,如果该字符属于某特殊的类别,就返回一个非零值(真):否则返回0(假).这个头文件在判断特定字符类型 ...

  9. 002基本的Dos命令

    002基本的Dos命令 1.开启Dos控制台的几种方式 几种打开CMD的方式: 直接在菜单中搜索"命令提示符". Win+R,输入cmd.(推荐) 在任意文件夹下面,按住Shift ...

  10. Servlet's characters of get and post

    Tomcat默认是使用ISO8859-1来解码的,ISO8859-1是不支持中文的. 1.post请求解决乱码原因: 服务器不知道按哪种编码来处理HTML等文件来响应给浏览器的,所以处理post请求时 ...