最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python編程編寫完善的命令行工具

 更新時(shí)間:2021年09月14日 14:56:45   作者:somenzz  
提到編寫命令行工具,你可能會(huì)想到用 sys.argv 或者標(biāo)準(zhǔn)庫(kù) argparse,沒錯(cuò),這兩個(gè)很常用,不過情況復(fù)雜時(shí)沒有那么方便和高效,因此今天分享兩個(gè)工具,讓你編寫命令行工具不費(fèi)吹灰之力

1. python-fire

python-fire 是一個(gè)三方庫(kù),可以將任何 Python 對(duì)象變成一個(gè)命令行接口。

使用前先 pip install fire 下。

可以把你的函數(shù)直接變成命令行接口:

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

然后在命令行,就可以執(zhí)行這些命令:

python hello.py  # Hello World!
python hello.py --name=David  # Hello David!
python hello.py --help  # Shows usage information.

也可以把可以把你的類直接變成命令行接口:

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

然后就可以這樣執(zhí)行:

python calculator.py double 10  # 20
python calculator.py double --number=15  # 30

除此之外,還有這樣的功能:

執(zhí)行后自動(dòng)進(jìn)入交互模式:

command -- --interactive

比如:

查看執(zhí)行的調(diào)用順序:

python arg_demo2.py double 10 -- --trace

結(jié)果如下:

還可以為你生成 shell 自動(dòng)補(bǔ)全命令的腳本,真的很貼心:

python arg_demo2.py double 10 -- --completion

2. mando

mando 是一個(gè)基于 argparse 的裝飾器,可以讓你在幾秒內(nèi)編寫出一個(gè)靈活、可維護(hù)的命令行工具。

使用前先 pip install mando 下。

用法:

example.py

from mando import command, main
@command
def echo(text, capitalize=False):
    '''Echo the given text.'''
    if capitalize:
        text = text.upper()
    print(text)
if __name__ == '__main__':
    main()
 

命令行用法:

$ python example.py -h
usage: example.py [-h] {echo} ...
positional arguments:
  {echo}
    echo      Echo the given text.
optional arguments:
  -h, --help  show this help message and exit
$ python example.py echo -h
usage: example.py echo [-h] [--capitalize] text
Echo the given text.
positional arguments:
  text
optional arguments:
  -h, --help    show this help message and exit
  --capitalize
 

真實(shí)執(zhí)行結(jié)果:

$ python example.py echo spam
spam
$ python example.py echo --capitalize spam
SPAM

再?gòu)?fù)雜一點(diǎn)的:

from mando import command, main
@command
def push(repository, all=False, dry_run=False, force=False, thin=False):
    '''Update remote refs along with associated objects.
    :param repository: Repository to push to.
    :param --all: Push all refs.
    :param -n, --dry-run: Dry run.
    :param -f, --force: Force updates.
    :param --thin: Use thin pack.'''
     print ('Pushing to {0}. All: {1}, dry run: {2}, force: {3}, thin: {4}'
           .format(repository, all, dry_run, force, thin))
if __name__ == '__main__':
    main()
  

mando 可以理解 Sphinx 風(fēng)格的文檔字符串中的 :param 參數(shù)說明,因此可以顯示幫助文檔。

$ python git.py push -h
usage: git.py push [-h] [--all] [-n] [-f] [--thin] repository
Update remote refs along with associated objects. 
positional arguments:
  repository     Repository to push to.
optional arguments:
  -h, --help     show this help message and exit
  --all          Push all refs.
  -n, --dry-run  Dry run.
  -f, --force    Force updates.
  --thin         Use thin pack.
 

mando 還可以理解 Python3 的類型提示,因此傳錯(cuò)了參數(shù),也會(huì)有報(bào)錯(cuò)提示:

from mando import command, main
@command
def duplicate(string, times: int):
    '''Duplicate text.
    :param string: The text to duplicate.
    :param times: How many times to duplicate.'''
    print(string * times)
if __name__ == '__main__':
    main()
 

執(zhí)行:

$ python3 test.py duplicate "test " 5
test test test test test
$ python3 test.py duplicate "test " foo
usage: test.py duplicate [-h] string times
test.py duplicate: error: argument times: invalid int value: 'foo'

最后的話

本文分享編寫建命令行工具的三方庫(kù),使用起來非常簡(jiǎn)單,我也是偶然在 GitHub 搜索到的,寫代碼前先在 GitHub 上搜一下真的是一個(gè)很好的習(xí)慣,以上就是Python編程編寫完善的命令行工具的詳細(xì)內(nèi)容,更多關(guān)于Python編寫完善的命令行工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 簡(jiǎn)單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    簡(jiǎn)單了解Python下用于監(jiān)視文件系統(tǒng)的pyinotify包

    這篇文章主要介紹了Python下用于監(jiān)視文件系統(tǒng)的pyinotify包,pyinotify基于inotify事件驅(qū)動(dòng)機(jī)制,需要的朋友可以參考下
    2015-11-11
  • 讓文件路徑提取變得更簡(jiǎn)單的Python Path庫(kù)

    讓文件路徑提取變得更簡(jiǎn)單的Python Path庫(kù)

    這里我們介紹 Python3 自帶的庫(kù) Path,可以讓我們使用更少的代碼但是與之而來的是更高的效率,文中有非常詳細(xì)的介紹及代碼示例 ,需要的朋友可以參考下
    2021-05-05
  • Python命令行參數(shù)化的四種方式詳解

    Python命令行參數(shù)化的四種方式詳解

    在日常編寫 Python 腳本的過程中,我們經(jīng)常需要結(jié)合命令行參數(shù)傳入一些變量參數(shù),使項(xiàng)目使用更加的靈活方便。本文章羅列了構(gòu)建 Python命令行參數(shù)的4種常見方式,需要的可以參考一下
    2022-06-06
  • python初學(xué)定義函數(shù)

    python初學(xué)定義函數(shù)

    這篇文章主要為大家介紹了python的定義函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • django-csrf使用和禁用方式

    django-csrf使用和禁用方式

    這篇文章主要介紹了django-csrf使用和禁用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • python中self原理實(shí)例分析

    python中self原理實(shí)例分析

    這篇文章主要介紹了python中self原理,較為詳細(xì)的分析了self的原理與相關(guān)的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 小結(jié)Python的反射機(jī)制

    小結(jié)Python的反射機(jī)制

    這篇文章主要介紹了Python的反射機(jī)制,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-09-09
  • python3.7實(shí)現(xiàn)云之訊、聚合短信平臺(tái)的短信發(fā)送功能

    python3.7實(shí)現(xiàn)云之訊、聚合短信平臺(tái)的短信發(fā)送功能

    這篇文章主要介紹了python3.7實(shí)現(xiàn)云之訊、聚合短信平臺(tái)的短信發(fā)送功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • python中提高pip install速度

    python中提高pip install速度

    本文給大家分享了如何提高pip install速度的方法,其實(shí)就是將默認(rèn)源替換為國(guó)內(nèi)高速的源,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下
    2020-02-02
  • Python實(shí)現(xiàn)判斷一行代碼是否為注釋的方法

    Python實(shí)現(xiàn)判斷一行代碼是否為注釋的方法

    今天小編就為大家分享一篇Python實(shí)現(xiàn)判斷一行代碼是否為注釋的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05

最新評(píng)論

河曲县| 辉南县| 安平县| 永新县| 右玉县| 青浦区| 芮城县| 拜城县| 仁布县| 丹巴县| 东乡县| 江源县| 报价| 福泉市| 邛崃市| 名山县| 星子县| 扬州市| 中宁县| 揭西县| 安达市| 汉中市| 郁南县| 齐齐哈尔市| 杭锦旗| 米脂县| 浙江省| 开远市| 大丰市| 沙坪坝区| 洞头县| 康定县| 晋中市| 义马市| 子长县| 常熟市| 喜德县| 邢台市| 丰县| 清新县| 石楼县|