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

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

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

os.system(command)

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

示例如下:

>>>importos

>>> 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:          是否显示窗口

示例如下:

>>>importwin32api

>>> 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:

【方式三】使用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())

(<892>, <644>,21592,18780)# 函数返回进程句柄、线程句柄、进程ID以及线程ID644>892>

结束进程:

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

TerminateProcess(handle, exitCode)

handle     要操作的进程句柄

exitCode   进程退出代码

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

WaitForSingleObject(handle, milisecond)

handle     : 要操作的进程句柄

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

示例如下:

>>>importwin32process

>>> handle = win32process.CreateProcess('C:\\Windows\\notepad.exe','',None,None,0, win32process

.CREATE_NO_WINDOW, None,None, win32process.STARTUPINFO())# 打开记事本,获得其句柄

>>> win32process.TerminateProcess(handle[0],0)# 终止进程

或者

>>> importwin32event

>>> 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函数。

>>>fromctypesimport*

>>> 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中四种运行其他程序的方式相关推荐

  1. python锁_Python中四种锁的使用示例(代码)

    本篇文章给大家带来的内容是关于Python中四种锁的使用示例(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Lock互斥锁 使用前num = 0 def a(): globa ...

  2. python语言单行注释以什么开头_python中单行注释以什么开头

    学会向程序中添加必要的注释,也是很重要的.注释不仅可以用来解释程序某些部分的作用和功能(用自然语言描述代码的功能),在必要时,还可以将代码临时移除,是调试程序的好帮手. 当然,添加注释的最大作用还是提 ...

  3. python有几种容器_Python中几种内置的容器(Containers)类型:列表、字典、集合和元组的比较和该注意的点...

    之所以称他们为容器类型是因为他们不像基本类型那样只有一种简单类型的数据,而是可以包含其他类型的数据,numpy的计算速度比原生Python快的一个很重要的原因就是numpy中的数组(类似于Python ...

  4. python的内建数据结构包括_Python中3种内建数据结构:列表、元组和字典

    Python中有3种内建的数据结构:列表.元组和字典.参考简明Python教程 1. 列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个 序列 的项目.假想你有一个购物列表,上面 ...

  5. anaconda怎么运行python程序_Python中四种运行其他程序的方式,你知道吗?

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

  6. python中系列的含义_python中四种组合数据类型的含义、声明、增删改查,遍历

    一.列表 列表:list 可以存储多个有顺序的可以重复的数据的类型 其他语言:数据:python中~提供的是列表[不说数组] 列表:操作数据:增加.删除.修改.查询 [CRUD] append/ins ...

  7. python语言的取余运算符_Python 中用于整数除法取余的运算符是()_学小易找答案...

    [填空题]隐球菌病多由()传播. [单选题]下列选项中,哪一个符号是管道符号. ( ) [多选题]可采用分批法计算产品成本的企业有( ) [填空题]现有字符串 s="1234567" ...

  8. python属性和方法的区别_Python中几种属性访问的区别与用法详解

    起步 在Python中,对于一个对象的属性访问,我们一般采用的是点(.)属性运算符进行操作.例如,有一个类实例对象foo,它有一个name属性,那便可以使用foo.name对此属性进行访问.一般而言, ...

  9. pythonmathcot函数_math库是python语言的数学模块吗_Python中的数学模块:Math和Cmath

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 当我们在日常生活中编写程序时,我们通常遇到需要使用数学来完成任务的情况.像其他编程语言一样,Python提 ...

最新文章

  1. 小型荧光驱动电路实验电路
  2. IC/FPGA校招笔试题分析(一)
  3. 生产者、消费者模式实现
  4. Atitit hsv转grb  应该优先使用hsv颜色原则 方便人类
  5. DataTable、DataView、ListBox 数据绑定与查询
  6. 一个帮助Java开发者快速学会Kotlin的开源项目
  7. 106. 动态中位数【经典 / 对顶堆】
  8. 删除Linux下/tmp目录引起的不正常登录系统
  9. 计算机移动设备有限公司,使计算机,移动设备更节能
  10. 为什么招聘高级前端开发这么难?
  11. mongodb和mysql创建表_MongoDB 数据库创建删除、表(集合)
  12. 使用commons-fileupload包实现文件上传
  13. 计算机熵的定义是,信息熵
  14. 拼多多|后端开发工程师|一面| 远程牛客面试 | 凉经 (2021/08/14)
  15. 20211104 为什么相似矩阵的迹相同
  16. 蜀门207服务端GM命令大全
  17. java sequencer_java sequencer播放列表
  18. 大连商务英语培训百家外语国际部怎样提高商务英语阅读技能?
  19. 没考计算机水平怎么填6,“计算机水平”怎么填,没曾考级,只参加过大 – 手机爱问...
  20. 完整PLC smart200伺服液压PID一套程序

热门文章

  1. vivaldi浏览器_Vivaldi,您的下一个浏览器?
  2. 网易新闻优化APK下载链接
  3. linux的scp命令用不了,CentOS使用不了scp命令怎么办
  4. 如何提升文档编写能力
  5. Android面试题之ContentProvider篇,安卓工程师面试题及答案
  6. ICT技术发展趋势,AI、大数据和云计算的概述及存储应用技术【2】
  7. Ubuntun国内镜像下载及虚拟机安装与换源
  8. 2021年秋季《概率论与数理统计》学习笔记
  9. arcgis fishnet渔网功能学习
  10. Python学习笔记(2):生成随机数