日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Python中调用Linux命令并获取返回值

發布時間:2025/3/20 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python中调用Linux命令并获取返回值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

方法一、使用os模塊的system方法:

os.system(cmd),其返回值是shell指令運行后返回的狀態碼,int類型,0表示shell指令成功執行,256/512表示未找到,該方法適用于shell命令不需要輸出內容的場景。

os.system(cmd)會啟動子進程,在子進程中執行cmd,如果cmd有執行內容,會在標準輸出顯示。

舉例說明:

列舉當前目錄下的所有文件。

import os val = os.system('ls -al') print val #輸出為0 val = os.system('ls -al non_exist_folder') print val #輸出為512 val = os.system('ls -al|grep non_exist_val') print val #輸出為256

方法二、使用os.popen()

該方法以文件的形式返回shell指令運行后的結果,需要獲取內容時可使用read()或readlines()方法。

os.system(cmd)或os.popen(cmd),前者返回值是腳本的退出狀態碼,后者的返回值是腳本執行過程中的輸出內容。實際使用時視需求情況而選擇。

舉栗:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import os os.popen('ls -l') 輸出:<open file 'ls -l', mode 'r' at 0x7f46af044930> os.popen('ls -l').read() #返回字符串類型的結果 輸出:'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt\n' os.popen('ls -l').readlines() #返回一個list類型的結果 輸出:['total 0\n', '-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n', '-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt\n']val=os.popen('ls -al') for i in val.readlines():print i

方法三、使用commands模塊,有三個方法可以使用:

(1)commands.getstatusoutput(cmd),其以元組(status,output)的形式返回命令執行后的返回狀態和執行結果。其中,對cmd的執行實際上是按照{cmd;} 2>&1的方式,所以output中包含控制臺輸出信息或者錯誤信息,output中不包含尾部的換行符。

(2)commands.getoutput(cmd),返回cmd的輸出結果。

(3)commands.getstatus(file),返回ls -l file的執行結果字符串,調用了getoutput,不建議使用此方法

import commands aa=commands.getstatusoutput('ls -l') 輸出:(0, 'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt') #返回一個元組,對比os.popen(cmd)的返回結果,發現output中不包含尾部的換行符 bb=commands.getoutput('ls -l') #只返回執行結果 輸出:'total 0\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt\n-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt'cc=commands.getstatus('a.txt') #查詢某個文件的狀態 輸出:'-rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt' dd=commands.getstatusoutput('ls -l non_exist_folder') #執行結果中包含控制臺輸出信息或者錯誤信息 輸出:(512, "ls: cannot access 'non_exist_folder': No such file or directory")

os.popen(cmd)返回的是一個類文件對象,commands.getoutput(cmd)返回了字符串類型的輸出結果,很多情況下用起來要更方便些。

方法四、subprocess模塊

允許創建很多子進程,創建的時候能指定子進程和子進程的輸入、輸出、錯誤輸出管道,執行后能獲取輸出結果和執行狀態。

(1)subprocess.run():python3.5中新增的函數, 執行指定的命令, 等待命令執行完成后返回一個包含執行結果的CompletedProcess類的實例。

(2)subprocess.call():執行指定的命令, 返回命令執行狀態, 功能類似os.system(cmd)。

(3)subprocess.check_call():python2.5中新增的函數, 執行指定的命令, 如果執行成功則返回狀態碼, 否則拋出異常。

說明:

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

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

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

args:表示shell指令,若以字符串形式給出shell指令,如"ls -l “則需要使shell = Ture。否則默認以數組形式表示shell變量,如"ls”,"-l"。

當使用比較復雜的shell語句時,可以先使用shlex模塊的shlex.split()方法來幫助格式化命令,然后在傳遞給run()方法或Popen。

subprocess.run()、subprocess.call()、subprocess.check_call()、subprocess.check_output()都是通過對subprocess.Popen的封裝來實現的高級函數,因此如果我們需要更復雜功能時,可以通過subprocess.Popen來完成

使用舉栗:

''' 遇到問題沒人解答?小編創建了一個Python學習交流QQ群:778463939 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' import shlex import subprocess command='ls -l' args=shlex.split('ls -l') bb=subprocess.Popen(args) #bb是一個Popen的對象,該對象不能通過read()或readlines()來讀取 輸出:total 0 -rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt -rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt #在該處需要點擊換行符才會結束 aa=subprocess.call('ls -l',shell=True) #其返回值為shell命令的執行返回碼 輸出:total 0 -rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 a.txt -rw-rw-r-- 1 roaddb roaddb 0 Dec 11 10:09 b.txt #直接返回

在Python3中的情況

期望:想要在Python3中執行curl命令并返回執行結果,返回結果時json體

分析:

cmd='curl -s "http://127.0.0.1:8080/xxxxx"'

1)使用os.system(cmd) 無法獲取輸出內容

2)使用os.popen(cmd).read()可以獲取到返回的json體${aa},通過json.loads(${aa})可以將json體轉為字典樣式

3)commands模塊在Python3.0中被廢棄了

4)subprocess.getstatusoutput(cmd)輸出結果類似于python2中的commands.getstatusoutput(cmd),返回一個元組,元組的第2個值是執行結果${aa},通過json.loads(${aa})可以將json體轉為字典樣式。

總結

以上是生活随笔為你收集整理的Python中调用Linux命令并获取返回值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 日韩爱爱免费视频 | 亚洲精品久久久蜜桃 | 久久视频中文字幕 | 婷婷激情图片 | 日韩一区免费观看 | 亚洲aa | 一区二区三区日本视频 | 青青草草 | 欧洲精品久久久久毛片完整版 | 91视频最新地址 | 成人免费看类便视频 | 国产在线观看一区二区三区 | 欧美成人a∨高清免费观看 国产精品999视频 | 精品国产伦一区二区三 | 女人色极品影院 | 在线观看中文 | 激情午夜婷婷 | 欧美精品a区 | 99久久久无码国产精品性波多 | 国产一级片免费视频 | 五月亚洲婷婷 | 阿v天堂网 | 亚洲美女性生活 | 久久九九99 | 狠狠操导航 | 海角社区在线视频播放观看 | 久久精品一本 | 成人精品久久久午夜福利 | 日本r级电影在线观看 | 激情四虎| av免费在线观看网站 | 欧美少妇喷水 | 一区视频免费观看 | 97久久久久久 | 天天看夜夜看 | 久久精品国产免费看久久精品 | 免费观看在线视频 | 337p粉嫩色噜噜噜大肥臀 | 美女隐私免费看 | 亚洲爆乳无码一区二区三区 | 亚洲国产精品成人无久久精品 | 国产精品入口夜色视频大尺度 | 视频区小说区图片区 | 国产精品无码一区二区无人区多人 | 黄色片网站视频 | 在线精品观看 | 国产浪潮av | 怡春院一区二区 | 狠狠久久 | 高清欧美性猛交xxxx黑人猛交 | 成人免费毛片足控 | 国产精品zjzjzj在线观看 | 成人高清在线观看 | www.xxx在线观看 | 人人舔人人爽 | 樱花影院最新免费观看攻略 | 欧美日韩伊人 | 欧美一区在线观看视频 | 日批av| 色88久久久久高潮综合影院 | 日韩av一二区 | 成年人天堂 | 丹丹的呻吟声1一7 | 天天天天天天操 | www.亚洲视频 | 黄色欧美视频 | 在线免费观看视频网站 | 精品久久久无码中文字幕边打电话 | 农民人伦一区二区三区 | 欧美丝袜脚交 | 久久久精品免费视频 | 公肉吊粗大爽色翁浪妇视频 | 国产精品久久久久久久免费观看 | 手机在线观看av片 | 第一页综合 | 国产精品5区 | 永久免费精品影视网站 | www.狠狠操| 奇米影视777在线观看 | 国产又大又黄的视频 | av动漫网站| 一炮成瘾1v1高h | 国产成人99久久亚洲综合精品 | 国产精品熟女久久久久久 | 奇米精品一区二区三区四区 | 人人妻人人澡人人爽精品欧美一区 | 99久久婷婷国产综合精品电影 | 欧美成人免费观看视频 | 偷偷操不一样的99 | 综合激情在线 | 色屋视频 | 日韩欧美中文在线观看 | 成人免费小视频 | 涩av| 在线国产网站 | 91精品国产91久久久久福利 | 亚洲性免费 | 成人激情站 | 日本真人做爰免费视频120秒 |