• 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:Softwarepython3.6.8python.exe','python','child.py','k'),这里path就是C:Softwarepython3.6.8/python.exe,有'p'时,以文件名python,传入,该文件名默认自动从PATH环境变量中寻找,如os.execlp('python','pyton','child.py','k'),该处第一个'python',则是由系统环境变量(PATH)中Python对应的可执行文件。

    e代表的是用来代表新进程环境变量的映射,采用字典的形式。

    2.例子

    在G:PycharmProjectpythonScripts estOsExe.py中写入以下测试代码:

    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(返回解释器位置),则正常运行。 

    import os
    args=r' -f rawvideo -video_size 640x360 -pixel_format gray -r 997 -i F:FFmpegVideo_DropTest_20200605180630784_w640_h360_pMono8_f997.raw -preset slow -crf 1 -c:v libx264 output.mp4'
    args=args.strip().split(' ')
    os.execlp(r'F:FFmpegffmpeg.exe','ffmpeg.exe',*args)
    

     

    import os
    args=r'ffmpeg.exe -f rawvideo -video_size 640x360 -pixel_format gray -r 997 -i F:FFmpegVideo_DropTest_20200605180630784_w640_h360_pMono8_f997.raw -preset slow -crf 1 -c:v libx264 output.mp4'
    args=args.strip().split(' ')
    # os.execlp(r'F:FFmpegffmpeg.exe','ffmpeg.exe',*args)
    os.execvp(r'F:FFmpegffmpeg.exe',args)
    

      

    对于os.execlp,os.execvp,中args中一定不能省略了'ffmpeg.exe'!

    ##### 愿你一寸一寸地攻城略地,一点一点地焕然一新 #####
  • 相关阅读:
    gRPC实战
    深入浅出docker
    jquery操作复选框(checkbox)的12个小技巧总结
    System.Diagnostics.Process.Start的妙用
    Redis持久化数据丢失及解决
    【ASP.NET 问题】IIS发布网站后出现 "处理程序“PageHandlerFactoryIntegrated”在其模块列表中有一个错误"的解决办法
    asp.net 网页抓取内容
    Ajax学习资源大全[本来是转载的,但是现在我增加了很多]
    jquery如何判断checkbox(复选框)是否被选中
    JS获取屏幕高度
  • 原文地址:https://www.cnblogs.com/johnyang/p/10888780.html
Copyright © 2020-2023  润新知