溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Python執(zhí)行腳本方法都有哪些

發(fā)布時間:2021-09-26 16:59:41 來源:億速云 閱讀:344 作者:柒染 欄目:系統(tǒng)運維

這篇文章將為大家詳細講解有關(guān)Python執(zhí)行腳本方法都有哪些,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

Python中調(diào)用shell腳本,常用的函數(shù)有os.system、os.popen()和subprocess.Popen()

  1. os.system方法
    語法:os.system(cmd)
    os.system()執(zhí)行過程中主要執(zhí)行了:fork()出一子進程;子進程調(diào)用exec()執(zhí)行命令。
    例1:

    >>> import os
    >>> os.system('dir D:\Python')

    Python執(zhí)行腳本方法都有哪些
    執(zhí)行成功,返回0。
    例2:

    import os
    res = os.system('ping www.baidu.com -n 3')
    if res == 0:
    print('成功')
    else:
    print('失敗了')

    執(zhí)行結(jié)果:
    Python執(zhí)行腳本方法都有哪些
    注:
    1).os.system()執(zhí)行cmd指令,返回結(jié)果0表示執(zhí)行成功,返回1表示失敗。
    2).os.system()無法獲取在cmd輸出的內(nèi)容。
    3).os.system()調(diào)用外部系統(tǒng)命令,返回命令結(jié)果碼,無法獲取命令執(zhí)行輸出結(jié)果。

  2. os.popen方法
    語法:popen(cmd, mode='r', buffering = -1)
    參數(shù):  

    cmd:要執(zhí)行的命令。
    mode:打開文件的模式,默認為'r',用法與open()相同。
    buffering:(可選參數(shù)),0表無緩沖;1表行緩沖;-1表默認緩沖值;

    os.popen()方法會打開一管道,返回結(jié)果是一連接管道的文件對象。執(zhí)行成功返回文件對象中讀取的返回結(jié)果,不返回狀態(tài)碼。執(zhí)行失敗,返回執(zhí)行的錯誤信息。并且返回結(jié)果可賦于一變量,便于程序的處理。
    例1:
    文件內(nèi)容:D:\Python\test.py

    print('popen()測試')

    文件內(nèi)容:D:\Python\test2.py

    res = os.popen(r'D:\Python\test.py', mode='r')
    res1 = res.read()       #返回結(jié)果賦于一變量,便于程序的處理
    print(res1)   
    print(type(res1))     #返回str
    res.close()

    python D:\Python\test2.py 執(zhí)行結(jié)果:
    Python執(zhí)行腳本方法都有哪些

  3. subprocess模塊
    os.system、os.popen實現(xiàn)的功能在subprocess模塊都可實現(xiàn),推薦使用。并且subprocess模塊還可調(diào)用外部系統(tǒng)命令來創(chuàng)建新子進程。subprocess執(zhí)行系統(tǒng)命令的時候并不會讓主進程去執(zhí)行,而是主進程會開辟fork()出一個子進程去執(zhí)行,并不會影響到主進程的運行。
    subprocess模塊主要有call()、Popen()函數(shù)。
    3.1 subprocess.Popen()函數(shù)
    語法:

    subprocess.Popen(args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)

    args:要調(diào)用的外部系統(tǒng)命令。
    bufsize:默認值為0, 表示不緩存;為1表示行緩存;其他正數(shù)表示緩存使用的大?。回摂?shù)-1表示使用系統(tǒng)默認的緩存大小。
    stdin、stdout、stderr:分別表示標準輸入、標準輸出和標準錯誤。其值有PIPE、文件描述符和None等。默認值為None,表示從父進程繼承。
    shell:Linux中參數(shù)值為False時,Linux上通過調(diào)用os.execvp執(zhí)行對應(yīng)的程序。True時,Linux上直接調(diào)用系統(tǒng)shell來執(zhí)行程序。Windows中參數(shù)shell設(shè)為true,程序?qū)⑼ㄟ^shell來執(zhí)行。
    cwd:設(shè)置子進程當前目錄。
    env:env是字典類型,指定子進程的環(huán)境變量。默認值為None,表示子進程的環(huán)境變量將從父進程中繼承。
    subprocess.PIPE:在創(chuàng)建Popen對象時,subprocess.PIPE可以初始化stdin, stdout或stderr參數(shù),表示與子進程通信的標準流。執(zhí)行結(jié)果丟到管道(共享內(nèi)存空間,用于進程之間共享)。
    例1:

    cmd = 'ipconfig | findstr "192.168.1.128"'
    p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)    #將正確的執(zhí)行結(jié)果丟到管道中。
    res = p.stdout.read().decode('gbk')    #主進程去管道里獲取正確stdout的結(jié)果,并將獲取的結(jié)果的bytes類型轉(zhuǎn)換。
    print(res)
    print(type(res))

    Python執(zhí)行腳本方法都有哪些
    subprocess.Popen()方法與os.popen()相比較,os.popen()獲取的輸出結(jié)果是直接可讀的,而subprocess.Popen()獲取的輸出結(jié)果是以二進制形式的且會有換行符。
    3.2 subprocess.call()函數(shù)
    調(diào)用外部系統(tǒng)命令,并返回執(zhí)行結(jié)果碼。功能類似于os.system(cmd)。0表示執(zhí)行成功,返回1表示失敗。
    例子2:

    import subprocess
    res = subprocess.call('ping www.baidu.com', shell=True)
    print('>>> ping www.baidu.com')
    print('測試res:', res)

    結(jié)果:
    Python執(zhí)行腳本方法都有哪些

關(guān)于Python執(zhí)行腳本方法都有哪些就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI