欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實(shí)現(xiàn)?Python?腳本生成命令行

 更新時(shí)間:2022年05月22日 10:38:16   作者:??崔慶才丨靜覓????  
這篇文章主要介紹了實(shí)現(xiàn)?Python?腳本生成命令行,文章通過(guò)定義一個(gè)?scrape?方法展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

有時(shí)候我們會(huì)有這樣的一個(gè)需求:

我們定義了一個(gè) Python 的方法,方法接收一些參數(shù),但是調(diào)用的時(shí)候想將這些參數(shù)用命令行暴露出來(lái)。

比如說(shuō)這里有個(gè)爬取方法:

import requests
def scrape(url, timeout=10):
    response = requests.get(url, timeout=timeout)
    print(response.text)

這里定義了一個(gè) scrape 方法,第一個(gè)參數(shù)接收 url,即爬取的網(wǎng)址,第二個(gè)參數(shù)接收 timeout,即指定超時(shí)時(shí)間。

調(diào)用的時(shí)候我們可能這么調(diào)用:

scrape('https:///www.baidu.com', 10)

如果我們想改參數(shù)換 url,那就得改代碼對(duì)吧。

所以有時(shí)候我們就想把這些參數(shù)用命令行暴露出來(lái),這時(shí)候我們可能就用上了 argparse 等等的庫(kù),挨個(gè)聲明各個(gè)參數(shù)是干嘛的,非常繁瑣,

代碼如下:

parser = argparse.ArgumentParser(description='Scrape Function')
parser.add_argument('url', type=str,
                    help='an integer for the accumulator')
parser.add_argument('timeout',  type=int,
                    help='sum the integers (default: find the max)')
if __name__ == '__main__':
    args = parser.parse_args()
    scrape(args.url, args.timeout)

這樣我們才能順利地使用命令行來(lái)調(diào)用這個(gè)腳本:

python3 main.py https://www.baidu.com 10

是不是感覺(jué)非常麻煩?argparse 寫(xiě)起來(lái)又臭又長(zhǎng),想想就費(fèi)勁。

Fire

但接下來(lái)我們要介紹一個(gè)庫(kù),用它我們只需要兩行代碼就可以做到如上操作。

這個(gè)庫(kù)的名字叫做Fire,它可以快速為某個(gè) Python 方法或者類添加命令行的參數(shù)支持。

先看看安裝方法,使用 pip3 安裝即可:

pip3 install fire

這樣我們就安裝好了。

使用方法

下面我們來(lái)看幾個(gè)例子。

方法支持

第一個(gè)代碼示例如下:

import fire
def hello(name="World"):
  return "Hello %s!" % name
if __name__ == '__main__':
  fire.Fire(hello)

這里我們定義了一個(gè) hello 方法,然后接收一個(gè) name 參數(shù),默認(rèn)值是 World,接著輸出了 Hello 加 name 這個(gè)字符串。

然后接著我們導(dǎo)入了 fire 這個(gè)庫(kù),調(diào)用它的 Fire 方法并傳入 hello 這個(gè)方法聲明,會(huì)發(fā)生什么事情呢?

我們把這段代碼保存為 demo1.py,接著用 Python3 來(lái)運(yùn)行一下:

python3 demo1.py

運(yùn)行結(jié)果如下:

Hello World!

看起來(lái)并沒(méi)有什么不同。

但我們這時(shí)候如果運(yùn)行如下命令,就可以看到一些神奇的事情了:

python3 demo1.py --help

運(yùn)行結(jié)果如下:

NAME
    demo1.py
SYNOPSIS
    demo1.py <flags>
FLAGS
    --name=NAME
        Default: 'World'

可以看到,這里它將 name 這個(gè)參數(shù)轉(zhuǎn)化成了命令行的一個(gè)可選參數(shù),我們可以通過(guò) —-name 來(lái)替換 name 參數(shù)。

我們來(lái)試下:

python3 demo1.py --name 123

這里我們傳入了一個(gè) name 參數(shù)是 123,這時(shí)候我們就發(fā)現(xiàn)運(yùn)行結(jié)果就變成了如下內(nèi)容:

Hello 123!

是不是非常方便?我們沒(méi)有借助 argparse 就輕松完成了命令行參數(shù)的支持和替換。

那如果我們將 name 這個(gè)參數(shù)的默認(rèn)值取消呢?代碼改寫(xiě)如下:

import fire
def hello(name):
  return "Hello %s!" % name
if __name__ == '__main__':
  fire.Fire(hello)

這時(shí)候重新運(yùn)行:

python3 demo1.py --help

就可以看到結(jié)果變成了如下內(nèi)容:

NAME
    demo1.py
SYNOPSIS
    demo1.py NAME
POSITIONAL ARGUMENTS
    NAME
NOTES
    You can also use flags syntax for POSITIONAL ARGUMENTS

這時(shí)候我們發(fā)現(xiàn) name 這個(gè)參數(shù)就變成了必傳參數(shù),我們必須在命令行里指定這個(gè)參數(shù)內(nèi)容,調(diào)用就會(huì)變成如下命令:

python3 demo1.py 123

運(yùn)行結(jié)果還是一樣的。

類支持

當(dāng)然 fire 這個(gè)庫(kù)不僅僅支持給方法添加命令行的支持,還支持給一個(gè)類添加命令行的支持。

下面我們?cè)倏匆粋€(gè)例子:

import fire
class Calculator(object):    
    def double(self, number):
        return 2 * number
if __name__ == '__main__':
    fire.Fire(Calculator)

我們把這個(gè)代碼保存為 demo2.py,然后運(yùn)行:

python3 demo2.py

運(yùn)行結(jié)果如下:

NAME
    demo2.py

SYNOPSIS
    demo2.py COMMAND

COMMANDS
    COMMAND is one of the following:

     double

可以看到,這里它將 Calculator 這個(gè)類中的方法識(shí)別出來(lái)了,COMMAND 之一就是 double,我們?cè)囍{(diào)用下:

python3 demo2.py double

運(yùn)行結(jié)果如下:

ERROR: The function received no value for the required argument: number
Usage: demo2.py double NUMBER

For detailed information on this command, run:
  demo2.py double --help

這里就說(shuō)了,這里必須要指定另外一個(gè)參數(shù),叫做 NUMBER,同時(shí)這個(gè)參數(shù)還是必填參數(shù),我們?cè)囍酉拢?/p>

python3 demo2.py double 4

運(yùn)行結(jié)果如下:

8

這時(shí)候就可以達(dá)到正確結(jié)果了。

所以說(shuō),綜合來(lái)看,fire 可以為一個(gè)類命令行,每個(gè)命令都對(duì)應(yīng)一個(gè)方法的名稱,同時(shí)在后面添加額外的可選或必選參數(shù),加到命令行參數(shù)的后面。

重新改寫(xiě)

最后,讓我們回過(guò)頭來(lái),給我們一開(kāi)始定義的 scrape 方法添加命令行的參數(shù)支持:

import requests
import fire
def scrape(url, timeout=10):
    response = requests.get(url, timeout=timeout)
    print(response.text)
if __name__ == '__main__':
    fire.Fire(scrape)

這樣就可以了!省去了冗長(zhǎng)的 argparse 的代碼,是不是非常方便?

調(diào)用就是如下形式:

NAME
    main.py
SYNOPSIS
    main.py URL <flags>

POSITIONAL ARGUMENTS
    URL
FLAGS
    --timeout=TIMEOUT
        Default: 10

這里說(shuō)了,URL 是必傳參數(shù),timeout 是可選參數(shù)。

最后調(diào)用下:

python3 main.py https://www.baidu.com 

這樣我們就可以輕松將 url 通過(guò)命令行傳遞過(guò)去了。

當(dāng)然 timeout 還是可選值,我們可以通過(guò) —-timeout 來(lái)指定 timeout 參數(shù):

python3 main.py https://www.baidu.com --timeout 5

這樣兩個(gè)參數(shù)就都能順利賦值了,最后效果就是爬取百度,5 秒超時(shí)。

到此這篇關(guān)于實(shí)現(xiàn) Python 腳本生成命令行的文章就介紹到這了,更多相關(guān) Python 命令行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python添加列表元素append(),extend()及?insert()

    python添加列表元素append(),extend()及?insert()

    這篇文章主要介紹了python添加列表元素append(),extend()及?insert(),列表是儲(chǔ)存元素的數(shù)據(jù)類型,既然能存儲(chǔ)元素,那么就類似數(shù)據(jù)庫(kù)一樣,增刪改查的一些功能就不能少了。下面我們就來(lái)先看看添加列表元素方法有哪些,需要的朋友可以參考一下
    2022-03-03
  • python能在瀏覽器能運(yùn)行嗎

    python能在瀏覽器能運(yùn)行嗎

    在本篇文章里小編給大家整理了關(guān)于python能否在瀏覽器能運(yùn)行的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2020-06-06
  • Python基礎(chǔ)之?dāng)?shù)據(jù)類型相關(guān)知識(shí)總結(jié)

    Python基礎(chǔ)之?dāng)?shù)據(jù)類型相關(guān)知識(shí)總結(jié)

    眾所周知,在Python中,常用的數(shù)據(jù)類型有三種,分別是字符串、整數(shù)和浮點(diǎn)數(shù).在Python基礎(chǔ)學(xué)習(xí)的過(guò)程中,數(shù)據(jù)類型是初學(xué)者常常容易混淆的一個(gè)基礎(chǔ)知識(shí)點(diǎn),本文為大家詳細(xì)總結(jié)了三種數(shù)據(jù)類型的概念、數(shù)據(jù)類型的查詢以及更為復(fù)雜的數(shù)據(jù)轉(zhuǎn)化,需要的朋友可以參考下
    2021-06-06
  • python hough變換檢測(cè)直線的實(shí)現(xiàn)方法

    python hough變換檢測(cè)直線的實(shí)現(xiàn)方法

    這篇文章主要介紹了python hough變換檢測(cè)直線的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python+OpenCV圖像處理——實(shí)現(xiàn)輪廓發(fā)現(xiàn)

    Python+OpenCV圖像處理——實(shí)現(xiàn)輪廓發(fā)現(xiàn)

    這篇文章主要介紹了Python+OpenCV實(shí)現(xiàn)輪廓發(fā)現(xiàn),幫助大家更好的利用python處理圖片,感興趣的朋友可以了解下
    2020-10-10
  • 利用Python實(shí)現(xiàn)電影訂票系統(tǒng)

    利用Python實(shí)現(xiàn)電影訂票系統(tǒng)

    這篇文章主要介紹了利用Python實(shí)現(xiàn)電影訂票系統(tǒng),一部電影的詳細(xì)信息適合用?字典?結(jié)構(gòu)來(lái)存儲(chǔ),我們可以給字典里添加多個(gè)鍵值對(duì)來(lái)保存電影的名稱、座位表和宣傳時(shí)用的字符畫(huà),需要的朋友可以參考一下
    2022-03-03
  • python目標(biāo)檢測(cè)YoloV4當(dāng)中的Mosaic數(shù)據(jù)增強(qiáng)方法

    python目標(biāo)檢測(cè)YoloV4當(dāng)中的Mosaic數(shù)據(jù)增強(qiáng)方法

    這篇文章主要為大家介紹了python目標(biāo)檢測(cè)YoloV4當(dāng)中的Mosaic數(shù)據(jù)增強(qiáng)方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 詳解python對(duì)象之間的交互

    詳解python對(duì)象之間的交互

    這篇文章主要介紹了詳解python對(duì)象之間的交互,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • Python實(shí)現(xiàn)計(jì)算最小編輯距離

    Python實(shí)現(xiàn)計(jì)算最小編輯距離

    這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算最小編輯距離的相關(guān)代碼,有需要的小伙伴可以參考下
    2016-03-03
  • Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成功能

    Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成功能

    聲音的本質(zhì)是震動(dòng),震動(dòng)的本質(zhì)是位移關(guān)于時(shí)間的函數(shù),波形文件(.wav)中記錄了不同采樣時(shí)刻的位移。這篇文章主要介紹了Python實(shí)現(xiàn)語(yǔ)音識(shí)別和語(yǔ)音合成,需要的朋友可以參考下
    2019-09-09

最新評(píng)論