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中寫入以下測試代碼:

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

 

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'!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM