python之os.exec*族用法简结
1.简介
os.exec*族主要用来代替当前进程,执行新的程序,不返回值。在UNIX上,新的执行程序加载到当前进程,与调用它的进程有相同的id。
(1)os.execl
(program,cmdarg1,cmdarg2,...cmdargN)
基本的'l'型exec,cmdarg1,cmdargN是一个或多个命令行参数,等价于os.execv(program,(cmdarg1,cmdarg2,...cmdargN))
os.
execle
(path, arg0, arg1, ..., env)
os.
execlp
(file, arg0, arg1, ...)
os.
execlpe
(file, arg0, arg1, ..., env)
(2)os.
execv
(program, commandlinesequence)
基本的'v'型exec,参数是可执行程序的名字,如‘c:/python.exe’,'D:/java.exe'等和用来运行程序用的命令参数组成的列表或者元组(也就是在shell中打的用于执行程序的参数,如 python test.py 100)
os.
execve
(path, args, env)
os.
execvp
(file, args)
os.
execvpe
(file, args, env)
需要说明的是:
‘l’和‘v'代表传入命令行的参数设置情况,'l'代表固定个数的命令行参数,传入时,分别以arg0,arg1...的形式,而’v'代表不定个数的命令行参数,传入时,以args(列表或者元组)的形式。
p代表的是路径,当无‘p'时,默认以可执行文件Python.exe的路径传入,如os.execl(r'C:\Software\python3.6.8\python.exe','python','child.py','k'),这里path就是C:\Software\python3.6.8/python.exe,有'p'时,以文件名python,传入,该文件名默认自动从PATH环境变量中寻找,如os.execlp('python','pyton','child.py','k'),该处第一个'python',则是由系统环境变量(PATH)中Python对应的可执行文件。
e代表的是用来代表新进程环境变量的映射,采用字典的形式。
2.例子
在G:\PycharmProject\pythonScripts\testOsExe.py中写入以下测试代码:
1 2 3 | import sys print ( 'test...' ) print ( 'sys.argv[1]-->' ,sys.argv[ 1 ]) |
os.execlp因为是‘l’型,所以命令行参数是分开的,得分开list的(大概是‘l’的含义),带着p,说明第一个参数program,如果写入'python'则可执行程序对应着系统环境变量Path中的‘python’的可执行程序路径,即用默认python解释器。而os.execl是'l'型,但没带'p',所以不会有上述带'p'的映射关系,去找python解释器,所以当第一个参数也是'python‘时,会报错,显然‘python’不是哪个可执行程序的路径。但如果传入sys.executable(返回解释器位置),则正常运行。
1 2 3 4 | import os args = r ' -f rawvideo -video_size 640x360 -pixel_format gray -r 997 -i F:\FFmpeg\Video_DropTest_20200605180630784_w640_h360_pMono8_f997.raw -preset slow -crf 1 -c:v libx264 output.mp4' args = args.strip().split( ' ' ) os.execlp(r 'F:\FFmpeg\ffmpeg.exe' , 'ffmpeg.exe' , * args) |
1 2 3 4 5 | import os args = r 'ffmpeg.exe -f rawvideo -video_size 640x360 -pixel_format gray -r 997 -i F:\FFmpeg\Video_DropTest_20200605180630784_w640_h360_pMono8_f997.raw -preset slow -crf 1 -c:v libx264 output.mp4' args = args.strip().split( ' ' ) # os.execlp(r'F:\FFmpeg\ffmpeg.exe','ffmpeg.exe',*args) os.execvp(r 'F:\FFmpeg\ffmpeg.exe' ,args) |
对于os.execlp,os.execvp,中args中一定不能省略了'ffmpeg.exe'!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix