<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一個(gè)小破網(wǎng)站,居然比 Python 官網(wǎng)還牛逼

          共 2836字,需瀏覽 6分鐘

           ·

          2021-08-06 09:06

          大家好,我是貓哥,分享一篇文章:

          前兩天,我發(fā)現(xiàn)有個(gè)前同事寫的 Shell 腳本經(jīng)常在出問題,考慮這個(gè)腳本一直挺不穩(wěn)定的,維護(hù)起來也挺頭疼,原因是 Shell 腳本寫稍微復(fù)雜一點(diǎn)的邏輯,代碼就變得十分臃腫,對比 Python 真的太差勁了。

          這個(gè) Shell 腳本中有一個(gè)功能是檢查機(jī)器上的 rpm 包與中心端的包版本進(jìn)行對比,在本地用 Shell 取 rpm 信息很方便,但要取 rpm 包版本,其實(shí)是很難的。

          原因是 rpm 包的版本格式分非常多種,根本無法使用簡單的字符串分割來取得具體的版本號,更不用說版本對比。

          在重寫這個(gè)功能的時(shí)候,我在找到了能直接獲取 Linux 機(jī)器 rpm 包的 Python 接口庫,這個(gè)庫要使用 yum 進(jìn)行安裝

          yum install -y rpm-python

          裝上之后,就可以直接導(dǎo)入使用。由于不是通過 pip 安裝的,因此 rpm-python 是安裝在 /usr/lib64/python2.7/site-packages/ 目錄下的。

          >>> import rpm
          >>> rpm.__path__
          ['/usr/lib64/python2.7/site-packages/rpm']

          # 1. 問題來了

          接口庫找到了,也安裝上了,可問題是。。。

          該怎么用???

          你以為百度一下就知道了?

          百度出來的,關(guān)于這個(gè)庫的介紹幾乎沒有。找到的幾個(gè)也不知所云,完全 get 不到邏輯。

          于是我嘗試著去該庫的 pypi 和 github 上,希望找到一些 demo 啥的,先入個(gè)門。

          看來是我想多了,要啥沒啥,一片空白。。


          使用 help 查看呢?更是一頭霧水,沒提取到有用的信息

          # 2. 神奇的網(wǎng)站

          好在 Google 上還是有點(diǎn)用的,它把一個(gè)神奇的網(wǎng)站推送到了我的面前,這個(gè)網(wǎng)站,就是今天我要為你介紹的主角。

          網(wǎng)站的主界面如下,站如其名啊,就是通過 代碼示例 來讓你學(xué)習(xí)各種庫的使用。

          整個(gè)網(wǎng)站非常的簡潔,只有一個(gè)搜索框,在這個(gè)搜索框里輸入你想要學(xué)習(xí)的 python 庫,就會立馬為你找到該庫的用法示例,并且會查到當(dāng)前有多少的開源項(xiàng)目在使用它。

          很明顯上面的第二個(gè)包,才是我們需要的東西,點(diǎn)進(jìn)去后,你會發(fā)現(xiàn)一個(gè)全新的世界。

          在你面前的是一個(gè)又一個(gè)的完整的代碼示例,這些示例系統(tǒng)、全面,非常適合初次學(xué)習(xí)階段的理解。

          需要強(qiáng)調(diào)的是,這些示例全部摘自開源項(xiàng)目,然后按照每個(gè)示例上方的鏈接轉(zhuǎn)到原始項(xiàng)目或源文件。

          若你覺得有些示例的代碼寫得不錯,對你也有幫助的,可以給它點(diǎn)個(gè)贊。。

          就以 rpm 庫為例,來感受一下。

          獲取已安裝的所有所有 rpm 包

          檢查一個(gè)庫是否已經(jīng)安裝過?

          如何根據(jù)關(guān)鍵詞搜索指定的包并精準(zhǔn)獲取其版本

          如何獲取離線rpm包的信息

          還有挺多示例的,這里就不一一列舉了。

          參照著上面給出的真實(shí)案例,我也整理出我屬于我自己的 rpm 包的用法,比全網(wǎng) 90% 的文章都來得清晰易懂

          rpm 包無非就分兩種:

          1. 未安裝的 rpm 包

          2. 已安裝的 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)站中提煉出來的。

          本篇文章的主角并不是 rpm 這個(gè)庫的用法,而是上面這個(gè)網(wǎng)站。

          與 Python 官方網(wǎng)站提供的標(biāo)準(zhǔn)庫示例不一樣(趕緊切點(diǎn)題,不然有人說我標(biāo)題黨了),這個(gè)網(wǎng)站 ,不僅涵蓋了 Python 的內(nèi)置庫,只要你能說得上名的 Python 庫(當(dāng)然你自己測試上傳到 pypi 的那種庫肯定不能算是吧)應(yīng)該都在這個(gè)網(wǎng)站上找到你對應(yīng)的代碼示例。

          全站所收錄的 python 庫大概有將近 2000 個(gè),對應(yīng)大多數(shù)人的開發(fā)應(yīng)該都能滿足了,并且最重要的是,上面的示例全部來源真實(shí)的項(xiàng)目,因此更具參考價(jià)值。

          最后,網(wǎng)址是:https://www.programcreek.com/python

          Python貓技術(shù)交流群開放啦!群里既有國內(nèi)一二線大廠在職員工,也有國內(nèi)外高校在讀學(xué)生,既有十多年碼齡的編程老鳥,也有中小學(xué)剛剛?cè)腴T的新人,學(xué)習(xí)氛圍良好!想入群的同學(xué),請?jiān)诠杻?nèi)回復(fù)『交流群』,獲取貓哥的微信(謝絕廣告黨,非誠勿擾?。?/span>~


          還不過癮?試試它們




          技術(shù)人生:淺談如何成為技術(shù)一號位?

          Python之父:為什么要使用操作符?

          Python重大變化:是match-case,不是switch-case

          醒醒!Python已經(jīng)支持中文變量名啦!

          圣杯與銀彈:沒用的設(shè)計(jì)模式?

          Python 命令行之旅:深入 argparse(二)


          如果你覺得本文有幫助
          請慷慨分享點(diǎn)贊,感謝啦!
          瀏覽 39
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美激情国产91在线 | 男女成人 免费视频在线播放 | 豆花视频无码在线看 | 网红鹿少女演绎点外卖视频 | 欧美黄色一级A片 |