最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中os.system()、subprocess.run()、call()、check_output()的使用案例

 更新時(shí)間:2023年07月07日 10:17:52   作者:Python探索牛  
這篇文章主要介紹了Python中os.system()、subprocess.run()、call()、check_output()的使用案例,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

1.os.system()

os.system() 是對 C 語言中 system() 系統(tǒng)函數(shù)的封裝,允許執(zhí)行一條命令,并返回退出碼(exit code),命令輸出的內(nèi)容會直接打印到屏幕上,無法直接獲取。

示例:

# test.py
import os
os.system("ls -l | grep test")    # 允許管道符
# 測試執(zhí)行
$ ll                <======== 列出當(dāng)前目錄中的內(nèi)容
drwxr-xr-x 2 foo foo 4096 Feb 13 09:09 __pycache__
-rw-r--r-- 1 foo foo  359 Feb 19 09:21 test.py
$ python test.py
-rw-r--r-- 1 foo foo  359 Feb 19 09:21 test.py    <======== 只有名字包含 test 的文件被列出

2.subprocess.run()

Python 3.5 開始推薦使用這個(gè)方法執(zhí)行命令,其原型如下:

subprocess.run(
    args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, 
    shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, 
    text=None, env=None, universal_newlines=None
)

其中:

  • args: 可以是一個(gè)字符串(當(dāng) shell=True 時(shí)),也可以是一個(gè)列表(當(dāng) shell=False 時(shí))

  • stdin, stdout, stderr: 用于指定標(biāo)準(zhǔn)IO文件句柄,可以是:
  subprocess.PIPE: 用作 stdout, stderr 參數(shù)的值時(shí),可以從返回值對象中的 stdout 和 stderr 屬性中讀取輸出內(nèi)容
  subprocess.STDOUT: 用作 stderr 參數(shù)的值時(shí),相當(dāng)于把標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸入中)
  subprocess.DEVNULL: 用作 stdout, stderr 參數(shù)的值時(shí),相當(dāng)于把輸出內(nèi)容重定向到 /dev/null
  用戶已經(jīng)打開的文件對象或描述符(整型數(shù)字)
  • capture_output: 當(dāng)設(shè)置為 True 時(shí),相當(dāng)于 stdout 和 stderr 參數(shù)都設(shè)置為 True 了,可以通過返回值對象訪問標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容

  • shell: 當(dāng)設(shè)置為 True 時(shí),args 參數(shù)會當(dāng)做一條命令字符串(支持管道、重定向操作);當(dāng)它為 False 時(shí),args 需是一個(gè)列表(并且不支持管道、重定向操作)

  • cwd: 指定執(zhí)行命令的目錄,默認(rèn)為當(dāng)前目錄

  • timeout: 指定命令執(zhí)行超時(shí)時(shí)間(按妙計(jì)),若執(zhí)行超時(shí)了,會 kill 掉命令并拋出 TimeoutExpired 異常

  • check: 當(dāng)設(shè)置為 True 時(shí),會自動(dòng)檢測執(zhí)行退出碼,若不為0,則拋出 CalledProcessError 異常

  • text: 當(dāng)設(shè)置為 True 時(shí),stdin、stdout、stderr 會以“文本”模式打開(返回值對象中的 stdout、stderr 存儲文本內(nèi)容),否則返回值對象中 stdout、stderr 存儲的是字節(jié)序列

  • env: 用于設(shè)置程序執(zhí)行時(shí)繼承的環(huán)境變量等,默認(rèn)與當(dāng)前進(jìn)程相同

該方法返回一個(gè) CompletedProcess 對象,其中包含以下屬性:

  • returncode: 執(zhí)行命令的退出碼
  • stdout: 捕獲的標(biāo)準(zhǔn)輸出內(nèi)容(當(dāng) stdout 參數(shù)為 PIPE 時(shí))。其格式默認(rèn)為字節(jié)序列,除非 text 參數(shù)為 True (此時(shí)為文本格式)。
  • stderr: 捕獲的標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容(當(dāng) stderr 參數(shù)為 PIPE 時(shí))。其格式默認(rèn)為字節(jié)序列,除非 text 參數(shù)為 True (此時(shí)為文本格式)。
  • args: 同參數(shù) args 。

示例:

import subprocess
subprocess.run(["ls", "-l"])            # 默認(rèn)時(shí),args 參數(shù)需是一個(gè)列表
subprocess.run("ls -l", shell=True)     # 當(dāng) shell 為 True 時(shí),args 是一個(gè)字符串
ret = subprocess.run("ls -l", shell=True, capture_output=True, text=True) # 以文本模式捕獲輸出內(nèi)容
print("Return code:", ret.returncode)   # Return code: 0
print("STDOUT:", ret.stdout)            # STDOUT: ...當(dāng)前目錄內(nèi)容...
print("STDERR:", ret.stderr)            # STDERR: <空>
ret = subprocess.run("abcdefg", shell=True, text=True,  # 注意:這里必須 shell=True 才能捕獲到 /bin/sh 的輸出錯(cuò)誤
        # 當(dāng) shell=False 時(shí),是要去捕獲 "abcdefg" 命令自身輸出的內(nèi)容,但是它不存在,python 會報(bào)錯(cuò)
    stdout=subprocess.PIPE, stderr=subprocess.STDOUT    # 標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出
) 
print("STDOUT:", ret.stdout)            # STDOUT: /bin/sh: abcdefg: command not found

另一個(gè)用于測試 shell 參數(shù)區(qū)別的示例如下:

import sys, re, subprocess
if len(sys.argv) == 1:  # parent process
    cmd = ["python", sys.argv[0], "--run-child"]
    ret = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    print(ret) # CompletedProcess(args=['python', 'test.py', '--run-child'], returncode=0, stdout='stdout output\n', stderr='stderr output')
    assert re.match("stdout output", ret.stdout)
    assert re.match("stderr output", ret.stderr)    # 如果 cmd 中的命令不存在,這里是捕獲不到的,subprocess.run()自己就會報(bào)錯(cuò)
    ret = subprocess.run(" ".join(cmd), shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    print(ret) # CompletedProcess(args='python test.py --run-child', returncode=0, stdout='stdout output\n', stderr='stderr output')
    assert re.match("stdout output", ret.stdout)
    assert re.match("stderr output", ret.stderr)    # 如果 cmd 中的命令不存在,這里也是可以捕獲到的,內(nèi)容可能是 xxx command not found
    print("Passed!")
else:                   # child process
    print("stdout output")
    sys.stderr.write("stderr output")

3.subprocess.call()

Python 3.5 以前(包括 2.x 版本)沒有 subprocess.run() 方法,可以使用 subprocess.call() 來執(zhí)行命令,該方法原型如下:

subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False, cwd=None, timeout=None)

注意:這個(gè)方法的返回值是命令的退出碼,而不是一個(gè)對象,所以無法像 subprocess.run() 一樣捕獲命令輸出內(nèi)容(不要設(shè)置 stdout=PIPE 或 stderr=PIPE,否則可能造成命令卡死)。

該方法的其它參數(shù)與 subprocess.run() 類似。

4.subprocess.check_output()

Python 3.5 以前的版本,要想捕獲命令輸出內(nèi)容,可以使用 subprocess.check_output() 方法,它的原型如下:

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, cwd=None, encoding=None, errors=None, universal_newlines=None, timeout=None, text=None)

注意:參數(shù)中沒有 stdout ,因?yàn)檫@個(gè)函數(shù)的返回值默認(rèn)就是標(biāo)準(zhǔn)輸出內(nèi)容,也可以將設(shè)置 stderr=subprocess.STDOUT 將標(biāo)準(zhǔn)錯(cuò)誤重定向到標(biāo)準(zhǔn)輸出,但是好像沒有辦法單獨(dú)捕獲標(biāo)準(zhǔn)錯(cuò)誤內(nèi)容呢!

示例:

import sys, re, subprocess
if len(sys.argv) == 1:  # parent process
    cmd = ["python", sys.argv[0], "--run-child"]
    ret = subprocess.check_output(cmd, stderr=subprocess.STDOUT)
    print("[" + ret + "]")  # 輸出內(nèi)容中包含標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,輸出順序在 windows 下和 linux 下可能會有差異
    assert re.search("stdout output", ret)
    assert re.search("stderr output", ret)
    print("Passed!")
else:                   # child process
    print("stdout output")
    sys.stderr.write("stderr output")

到此這篇關(guān)于Python中os.system()、subprocess.run()、call()、check_output()的使用方法的文章就介紹到這了,更多相關(guān)Python中os.system()、subprocess.run()、call()、check_output()內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python excel和yaml文件的讀取封裝

    python excel和yaml文件的讀取封裝

    這篇文章主要介紹了python excel和yaml文件的讀取封裝,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • 11月編程語言排行榜 Python逆襲C#上升到第4

    11月編程語言排行榜 Python逆襲C#上升到第4

    11月編程語言排行榜 Python逆襲C#上升到第4,無論在哪個(gè)榜單中 Python 都是保持著非同尋常的增長速度,為什么Python增長的這么快
    2017-11-11
  • 簡單講解Python編程中namedtuple類的用法

    簡單講解Python編程中namedtuple類的用法

    namedtuple類位域Collections模塊中,有了namedtuple后通過屬性訪問數(shù)據(jù)能夠讓我們的代碼更加的直觀更好維護(hù),下面就來簡單講解Python編程中namedtuple類的用法
    2016-06-06
  • python PyAUtoGUI庫實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤

    python PyAUtoGUI庫實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤

    這篇文章主要介紹了python PyAUtoGUI庫實(shí)現(xiàn)自動(dòng)化控制鼠標(biāo)鍵盤,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • 對python 矩陣轉(zhuǎn)置transpose的實(shí)例講解

    對python 矩陣轉(zhuǎn)置transpose的實(shí)例講解

    下面小編就為大家分享一篇對python 矩陣轉(zhuǎn)置transpose的實(shí)例講解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • 使用pandas讀取文件的實(shí)現(xiàn)

    使用pandas讀取文件的實(shí)現(xiàn)

    這篇文章主要介紹了使用pandas讀取文件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python中實(shí)現(xiàn)循環(huán)遍歷的完全指南

    Python中實(shí)現(xiàn)循環(huán)遍歷的完全指南

    循環(huán)是編程中最核心的概念之一,它允許我們重復(fù)執(zhí)行代碼塊,Python提供了兩種主要的循環(huán)結(jié)構(gòu),即for循環(huán)和while循環(huán),下面小編就和大家詳細(xì)介紹一下吧
    2026-02-02
  • Python實(shí)現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    Python實(shí)現(xiàn)將PowerPoint轉(zhuǎn)為HTML格式

    有時(shí)我們需要將精心設(shè)計(jì)的PPT發(fā)布到網(wǎng)絡(luò)上以便于更廣泛的訪問和分享,本文將介紹如何使用Python將PowerPoint轉(zhuǎn)換為HTML格式,需要的可以參考下
    2024-04-04
  • python plt可視化——打印特殊符號和制作圖例代碼

    python plt可視化——打印特殊符號和制作圖例代碼

    這篇文章主要介紹了python plt可視化——打印特殊符號和制作圖例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • PyQt5 界面顯示無響應(yīng)的實(shí)現(xiàn)

    PyQt5 界面顯示無響應(yīng)的實(shí)現(xiàn)

    這篇文章主要介紹了PyQt5 界面顯示無響應(yīng)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03

最新評論

监利县| 平凉市| 宣城市| 长宁县| 永平县| 金沙县| 澄迈县| 永寿县| 鄄城县| 长丰县| 定南县| 中西区| 荣成市| 宁城县| 金塔县| 穆棱市| 昭平县| 宣武区| 长宁区| 永川市| 长沙县| 札达县| 滨海县| 乡城县| 黄冈市| 建平县| 沁阳市| 湖北省| 延川县| 淮南市| 南城县| 南丹县| 南投县| 霍州市| 山西省| 合水县| 静宁县| 胶州市| 安吉县| 深泽县| 开鲁县|