濮阳杆衣贸易有限公司

主頁 > 知識庫 > 詳解Python調(diào)用系統(tǒng)命令的六種方法

詳解Python調(diào)用系統(tǒng)命令的六種方法

熱門標簽:江門智能電話機器人 滴滴地圖標注公司 杭州房產(chǎn)地圖標注 甘肅高頻外呼系統(tǒng) 地圖標注可以遠程操作嗎 智能電話機器人調(diào)研 天津塘沽區(qū)地圖標注 400電話在線如何申請 如何申請400電話代理

作為膠水語言,Python可以很方便的執(zhí)行系統(tǒng)命令,Python3中常用的執(zhí)行操作系統(tǒng)命令有os.system()、os.popen()、subprocess.popen()、subprocess.call()、subprocess.run()、subprocess.getstatusoutput()六種方法。

os.system()

system函數(shù)可以將字符串轉(zhuǎn)化成命令在服務器上運行;其原理是每一條system函數(shù)執(zhí)行時,其會創(chuàng)建一個子進程在系統(tǒng)上執(zhí)行命令行,子進程的執(zhí)行結(jié)果無法影響主進程。

其返回值是指令運行后返回的狀態(tài)碼,0表示指令成功執(zhí)行,1表示失敗,256表示沒有返回結(jié)果,該方法適用于系統(tǒng)命令不需要輸出內(nèi)容的場景。

用法:

os.system("command")

示例:

import os
a=os.system("ping 192.168.1.101") #使用a接收返回值
print(a)

輸出:

正在 Ping 192.168.1.101 具有 32 字節(jié)的數(shù)據(jù):
來自 192.168.1.101 的回復: 字節(jié)=32 時間=8ms TTL=127
來自 192.168.1.101 的回復: 字節(jié)=32 時間=2ms TTL=127
來自 192.168.1.101 的回復: 字節(jié)=32 時間=2ms TTL=127
來自 192.168.1.101 的回復: 字節(jié)=32 時間=2ms TTL=127

192.168.1.101 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 2ms,最長 = 8ms,平均 = 3ms
0
Process finished with exit code 0

也可以在linux系統(tǒng)下運行

import os
os.system('cd /home  mkdir test') 執(zhí)行多條命令可以使用連接

os.popen(command,mode)

這種調(diào)用方式是通過管道的方式來實現(xiàn),這個函數(shù)的返回值是一個文件對象,可以讀或者寫(由mode決定,mode默認是'r')。如果mode為'r',調(diào)用該對象的read()或readlines()方法可以讀取輸出內(nèi)容。

用法:os.popen(command[, mode[, bufsize]])

os.system(cmd)或os.popen(cmd),前者返回值是腳本的退出狀態(tài)碼,后者的返回值是腳本執(zhí)行過程中的輸出內(nèi)容。

import os
a=os.popen("ipconfig")
print(a.read())

輸出:
以太網(wǎng)適配器 以太網(wǎng):

   連接特定的 DNS 后綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
   子網(wǎng)掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1

subprocess模塊

subprocess模塊是python從2.4版本開始引入的模塊,主要用來取代 一些舊的模塊方法,如os.system、os.spawn、os.popen、commands.*等。官方推薦使用該模塊執(zhí)行系統(tǒng)命令,subprocess模塊通過子進程來執(zhí)行外部指令,并通過input/output/error管道,獲取子進程的執(zhí)行的返回信息。

好處在于:運用對線程的控制和監(jiān)控,將返回的結(jié)果賦于一變量,便于程序的處理。

subprocess.Popen()

使用Popen可以創(chuàng)建進程,并與進程進行復雜的交互。

用法:child = subprocess.Popen(["cmd","arg1"...])

常用參數(shù)說明:

示例

from subprocess import PIPE, Popen

# 返回的是 Popen 實例對象
proc = Popen(
  'ipconfig', # cmd特定的查詢空間的命令
  stdin=None, # 標準輸入 鍵盤
  stdout=PIPE, # -1 標準輸出(演示器、終端) 保存到管道中以便進行操作
  stderr=PIPE, # 標準錯誤,保存到管道
  shell=True)

# print(proc.communicate()) # 標準輸出的字符串+標準錯誤的字符串
outinfo, errinfo = proc.communicate()
print(outinfo.decode('gbk')) # 外部程序(windows系統(tǒng))決定編碼格式
print(errinfo.decode('gbk'))

輸出:

以太網(wǎng)適配器 以太網(wǎng):

   連接特定的 DNS 后綴 . . . . . . . :
   本地鏈接 IPv6 地址. . . . . . . . : fe81::b0ed:2b1b:7385:97d1%8
   IPv4 地址 . . . . . . . . . . . . : 192.168.1.100
   子網(wǎng)掩碼  . . . . . . . . . . . . : 255.255.255.0
   默認網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1


Process finished with exit code 0

subprocess.call()

執(zhí)行指定的命令, 返回命令執(zhí)行狀態(tài), 功能類似os.system(cmd),參數(shù)shell默認為False

用法:subprocess.call("command")

# linux獲取磁盤空間
import subprocess
subprocess.call(['df', '-h']) # 數(shù)組作為參數(shù)運行命令

輸出:
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           920M   32K  920M   1% /dev/shm
tmpfs           920M  472K  919M   1% /run
tmpfs           920M     0  920M   0% /sys/fs/cgroup
/dev/vda1        50G  6.2G   41G  14% /
tmpfs           184M     0  184M   0% /run/user/0

subprocess.run()

python3.5中新增的函數(shù), 執(zhí)行指定的命令, 等待命令執(zhí)行完成后返回一個包含執(zhí)行結(jié)果的CompletedProcess類的實例。run默認不會返回輸出,只返回命令和執(zhí)行狀態(tài)。

用法:

subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, shell=False, timeout=None, check=False, universal_newlines=False)

import subprocess
completed = subprocess.run(['ls', '-1'])
print('returncode:', completed.returncode)

subprocess.getstatusoutput()

執(zhí)行cmd命令,返回一個元組(命令執(zhí)行狀態(tài),命令執(zhí)行結(jié)果輸出)。

返回狀態(tài)碼和結(jié)果,0表示成功

import subprocess
ret, val = subprocess.getstatusoutput("ping www.baidu.com")
print(ret)
print(val)

輸出:
0

正在 Ping www.a.shifen.com [14.215.177.39] 具有 32 字節(jié)的數(shù)據(jù):
來自 14.215.177.39 的回復: 字節(jié)=32 時間=29ms TTL=53
來自 14.215.177.39 的回復: 字節(jié)=32 時間=29ms TTL=53
來自 14.215.177.39 的回復: 字節(jié)=32 時間=29ms TTL=53
來自 14.215.177.39 的回復: 字節(jié)=32 時間=30ms TTL=53

14.215.177.39 的 Ping 統(tǒng)計信息:
    數(shù)據(jù)包: 已發(fā)送 = 4,已接收 = 4,丟失 = 0 (0% 丟失),
往返行程的估計時間(以毫秒為單位):
    最短 = 29ms,最長 = 30ms,平均 = 29ms

關(guān)于subprocess模塊的具體用法,大家可以查看文檔進行學習https://docs.python.org/3/library/subprocess.html。

到此這篇關(guān)于詳解Python調(diào)用系統(tǒng)命令的六種方法的文章就介紹到這了,更多相關(guān)Python調(diào)用系統(tǒng)命令內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python實現(xiàn)類似jQuery使用中的鏈式調(diào)用的示例
  • 解決python調(diào)用matlab時的一些常見問題
  • Python調(diào)用R語言實例講解
  • python程序調(diào)用遠程服務的步驟詳解
  • 使用pycallgraph分析python代碼函數(shù)調(diào)用流程以及框架解析
  • Python與C/C++的相互調(diào)用案例
  • python調(diào)用百度AI接口實現(xiàn)人流量統(tǒng)計
  • 安裝python依賴包psycopg2來調(diào)用postgresql的操作
  • Python調(diào)用系統(tǒng)命令os.system()和os.popen()的實現(xiàn)
  • 詳解如何在VS2019和VScode中配置C++調(diào)用python接口
  • python中如何實現(xiàn)鏈式調(diào)用

標簽:東莞 廊坊 長春 河池 臨汾 漢中 重慶 德宏

巨人網(wǎng)絡通訊聲明:本文標題《詳解Python調(diào)用系統(tǒng)命令的六種方法》,本文關(guān)鍵詞  詳解,Python,調(diào)用,系統(tǒng),命令,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Python調(diào)用系統(tǒng)命令的六種方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳解Python調(diào)用系統(tǒng)命令的六種方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    邢台县| 佛山市| 镇安县| 大悟县| 原阳县| 得荣县| 远安县| 休宁县| 台南市| 松潘县| 阜宁县| 陕西省| 新邵县| 长乐市| 西乡县| 平昌县| 响水县| 敦煌市| 海安县| 丰县| 嘉善县| 河池市| 馆陶县| 吐鲁番市| 惠州市| 新兴县| 乡城县| 济南市| 邵武市| 阳原县| 东乡族自治县| 缙云县| 台南市| 旺苍县| 钦州市| 三都| 桐城市| 沂南县| 班玛县| 崇礼县| 屯留县|