優(yōu)質(zhì)文章,第一時(shí)間送達(dá)!
前兩天,我發(fā)現(xiàn)有個(gè)前同事寫的 Shell 腳本經(jīng)常在出問(wèn)題,考慮這個(gè)腳本一直挺不穩(wěn)定的,維護(hù)起來(lái)也挺頭疼,原因是 Shell 腳本寫稍微復(fù)雜一點(diǎn)的邏輯,代碼就變得十分臃腫,對(duì)比 Python 真的太差勁了。
這個(gè) Shell 腳本中有一個(gè)功能是檢查機(jī)器上的 rpm 包與中心端的包版本進(jìn)行對(duì)比,在本地用 Shell 取 rpm 信息很方便,但要取 rpm 包版本,其實(shí)是很難的。
原因是 rpm 包的版本格式分非常多種,根本無(wú)法使用簡(jiǎn)單的字符串分割來(lái)取得具體的版本號(hào),更不用說(shuō)版本對(duì)比。
在重寫這個(gè)功能的時(shí)候,我在找到了能直接獲取 Linux 機(jī)器 rpm 包的 Python 接口庫(kù),這個(gè)庫(kù)要使用 yum 進(jìn)行安裝
yum install -y rpm-python
裝上之后,就可以直接導(dǎo)入使用。由于不是通過(guò) pip 安裝的,因此 rpm-python 是安裝在 /usr/lib64/python2.7/site-packages/
目錄下的。
>>> import rpm
>>> rpm.__path__
['/usr/lib64/python2.7/site-packages/rpm']
# 1. 問(wèn)題來(lái)了
接口庫(kù)找到了,也安裝上了,可問(wèn)題是。。。
該怎么用???
你以為百度一下就知道了?
百度出來(lái)的,關(guān)于這個(gè)庫(kù)的介紹幾乎沒(méi)有。找到的幾個(gè)也不知所云,完全 get 不到邏輯。
于是我嘗試著去該庫(kù)的 pypi 和 github 上,希望找到一些 demo 啥的,先入個(gè)門。
看來(lái)是我想多了,要啥沒(méi)啥,一片空白。。
使用 help
查看呢?更是一頭霧水,沒(méi)提取到有用的信息
# 2. 神奇的網(wǎng)站
好在 Google 上還是有點(diǎn)用的,她把一個(gè)神奇的網(wǎng)站推送到了我的面前,這個(gè)網(wǎng)站,就是今天我要為你介紹的主角。
網(wǎng)站的主界面如下,站如其名啊,就是通過(guò) 代碼示例來(lái)讓你學(xué)習(xí)各種庫(kù)的使用。
整個(gè)網(wǎng)站非常的簡(jiǎn)潔,只有一個(gè)搜索框,在這個(gè)搜索框里輸入你想要學(xué)習(xí)的 python 庫(kù),就會(huì)立馬為你找到該庫(kù)的用法示例,并且會(huì)查到當(dāng)前有多少的開(kāi)源項(xiàng)目在使用她。
很明顯上面的第二個(gè)包,才是我們需要的東西,點(diǎn)進(jìn)去后,你會(huì)發(fā)現(xiàn)一個(gè)全新的世界。
在你面前的是一個(gè)又一個(gè)的完整的代碼示例,這些示例系統(tǒng)、全面,非常適合初次學(xué)習(xí)階段的理解。
需要強(qiáng)調(diào)的是,這些示例全部摘自開(kāi)源項(xiàng)目,然后按照每個(gè)示例上方的鏈接轉(zhuǎn)到原始項(xiàng)目或源文件。
若你覺(jué)得有些示例的代碼寫得不錯(cuò),對(duì)你也有幫助的,可以給她點(diǎn)個(gè)贊。。
就以 rpm
庫(kù)為例,來(lái)感受一下。
獲取已安裝的所有所有 rpm 包
檢查一個(gè)庫(kù)是否已經(jīng)安裝過(guò)?
如何根據(jù)關(guān)鍵詞搜索指定的包并精準(zhǔn)獲取其版本
如何獲取離線rpm包的信息
還有挺多示例的,這里就不一一列舉了。
參照著上面給出的真實(shí)案例,我也整理出我屬于我自己的 rpm 包的用法,比全網(wǎng) 90% 的文章都來(lái)得清晰易懂
rpm 包無(wú)非就分兩種:
未安裝的 rpm 包
已安裝的 rpm 包
想要獲取這兩種包,方式是不一樣的。
獲取未安裝的 rpm 包信息
>>> import rpm
>>> ts = rpm.TransactionSet
>>> rpmhdr = ts.hdrFromFdno("/root/librbd1-devel-10.2.10-0.el7.centos.x86_64.rpm")
>>> rpmhdr["NAME"]
'librbd1-devel'
>>> rpmhdr["VERSION"]
'10.2.10'
>>> rpmhdr["RELEASE"]
'0.el7.centos'
>>> rpmhdr["ARCH"]
'x86_64'
獲取已安裝的 rpm 包信息
>>> import rpm
>>> ts = rpm.TransactionSet
>>> query = ts.dbMatch("name", "librbd1")
>>> query.count
1
>>> pkg_info = next(query)
>>> pkg_info["NAME"]
'librbd1'
>>> pkg_info["VERSION"]
'12.2.9.1.1'
>>> pkg_info["RELEASE"]
'0.el7.centos'
>>> pkg_info["ARCH"]
'x86_64'
但喝水不忘挖井人,以上都是從這個(gè)網(wǎng)站中提煉出來(lái)的。
本篇文章的主角并不是 rpm
這個(gè)庫(kù)的用法,而是上面這個(gè)網(wǎng)站。
與 Python 官方網(wǎng)站提供的標(biāo)準(zhǔn)庫(kù)示例不一樣(趕緊切點(diǎn)題,不然有人說(shuō)我標(biāo)題黨了),這個(gè)網(wǎng)站 ,不僅涵蓋了 Python 的內(nèi)置庫(kù),只要你能說(shuō)得上名的 Python 庫(kù)(當(dāng)然你自己測(cè)試上傳到 pypi 的那種庫(kù)肯定不能算是吧)應(yīng)該都在這個(gè)網(wǎng)站上找到你對(duì)應(yīng)的代碼示例。
全站所收錄的 python 庫(kù)大概有將近 2000 個(gè),對(duì)應(yīng)大多數(shù)人的開(kāi)發(fā)應(yīng)該都能滿足了,并且最重要的是,上面的示例全部來(lái)源真實(shí)的項(xiàng)目,因此更具參考價(jià)值。
這個(gè)網(wǎng)站的地址,直接公眾號(hào)聊天界面回復(fù)「210802」即可獲取。
厲害了,Pandas 的表格居然能變得怎么漂亮!
有了這款神器,輕松用 Python 寫個(gè) APP
Django 之美
高大上的數(shù)學(xué)科普視頻,敲敲代碼就能出來(lái)!