濮阳杆衣贸易有限公司

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

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

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

作為膠水語(yǔ)言,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)化成命令在服務(wù)器上運(yùn)行;其原理是每一條system函數(shù)執(zhí)行時(shí),其會(huì)創(chuàng)建一個(gè)子進(jìn)程在系統(tǒng)上執(zhí)行命令行,子進(jìn)程的執(zhí)行結(jié)果無(wú)法影響主進(jìn)程。

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

用法:

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ù):
來(lái)自 192.168.1.101 的回復(fù): 字節(jié)=32 時(shí)間=8ms TTL=127
來(lái)自 192.168.1.101 的回復(fù): 字節(jié)=32 時(shí)間=2ms TTL=127
來(lái)自 192.168.1.101 的回復(fù): 字節(jié)=32 時(shí)間=2ms TTL=127
來(lái)自 192.168.1.101 的回復(fù): 字節(jié)=32 時(shí)間=2ms TTL=127

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

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

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

os.popen(command,mode)

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

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

os.system(cmd)或os.popen(cmd),前者返回值是腳本的退出狀態(tài)碼,后者的返回值是腳本執(zhí)行過(guò)程中的輸出內(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
   默認(rèn)網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1

subprocess模塊

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

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

subprocess.Popen()

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

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

常用參數(shù)說(shuō)明:

示例

from subprocess import PIPE, Popen

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

# print(proc.communicate()) # 標(biāo)準(zhǔn)輸出的字符串+標(biāo)準(zhǔn)錯(cuò)誤的字符串
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
   默認(rèn)網(wǎng)關(guān). . . . . . . . . . . . . : 192.168.1.1


Process finished with exit code 0

subprocess.call()

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

用法:subprocess.call("command")

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

輸出:
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í)行完成后返回一個(gè)包含執(zhí)行結(jié)果的CompletedProcess類(lèi)的實(shí)例。run默認(rèn)不會(huì)返回輸出,只返回命令和執(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命令,返回一個(gè)元組(命令執(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ù):
來(lái)自 14.215.177.39 的回復(fù): 字節(jié)=32 時(shí)間=29ms TTL=53
來(lái)自 14.215.177.39 的回復(fù): 字節(jié)=32 時(shí)間=29ms TTL=53
來(lái)自 14.215.177.39 的回復(fù): 字節(jié)=32 時(shí)間=29ms TTL=53
來(lái)自 14.215.177.39 的回復(fù): 字節(jié)=32 時(shí)間=30ms TTL=53

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

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

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

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

標(biāo)簽:東莞 廊坊 長(zhǎng)春 河池 臨汾 漢中 重慶 德宏

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Python調(diào)用系統(tǒng)命令的六種方法》,本文關(guān)鍵詞  詳解,Python,調(diào)用,系統(tǒng),命令,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Python調(diào)用系統(tǒng)命令的六種方法》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解Python調(diào)用系統(tǒng)命令的六種方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    海原县| 霍林郭勒市| 郁南县| 隆子县| 莱州市| 静海县| 太谷县| 奉新县| 锡林浩特市| 林州市| 大洼县| 离岛区| 丰原市| 武威市| 内乡县| 乳山市| 辽阳县| 盈江县| 庐江县| 延长县| 徐州市| 措勤县| 佛山市| 嘉鱼县| 江城| 句容市| 泸溪县| 兴义市| 兰坪| 安宁市| 芦溪县| 陆河县| 修武县| 寿宁县| 荃湾区| 平昌县| 兴城市| 孝感市| 奉新县| 略阳县| 浦北县|