Python:在一个Python程序中,运行另一个Python程序
学习自:
1~3学习自如何在python中执行另一个py文件_python_脚本之家
4~6学习自Python中四种运行其他程序的方式 - hankleo - 博客园
1、os.system方法
用法:
os.system('python3 xxx.py')
说明:
就相当于在cmd窗口中写python3 xxx.py,即运行Python程序。
支持传递参数
2、execfile('xxx.py')
3、如果想要得到这个文件的输出,可以用os.popen
4、ShellExecute
用法:
ShellExecute(hwnd, op, file, args, dir, show)
hwnd | 父窗口的句柄,如果没有父窗口,则为0 |
op | 要运行的操作,open、print、空 |
file | 要运行的程序 |
args | 传递的参数 |
dir | 程序所在目录 |
show | 是否显示窗口 |
例子:
import win32api.ShellExecute ShellExecute(0, 'open', 'notepad.exe', '', '', 0) #show=0,后台执行 ShellExecute(0, 'open', 'notepad.exe', '', '', 1) #前台打开 ShellExecute(0, 'open', 'notepad.exe', '1.txt', '', 1)#传入参数1.txt ShellExecute(0, 'open', 'http://www.sohu.com', '', '', 1)#打开网页 ShellExecute(0, 'open', 'D:\\Opera.mp3', '', '', 1)#打开音频文件,当路径指向一个文件时 ShellExecute(0, 'open', 'D:\\hello.py', '', '', 1)#运行程序
原理:使用ShellExecute函数,相当于在资源管理器中双击文件图标,系统会打开相应程序进行运行。
5、CreateProcess
顾名思义,CreateProcess即创建进程,通过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:进程退出代码
补充:该方法应该只能打开exe文件,打开其他文件时会报错
6、使用ctypes调用kernel32.dll中的函数
使用ctypes模块可以让Python调用位于动态链接库的函数。可以方便地调用由C语言编写的动态链接库,并向其传递参数。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性