人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

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

發(fā)布日期:2022-01-03 22:35 | 文章來源:源碼之家

1. python-fire

python-fire 是一個三方庫,可以將任何 Python 對象變成一個命令行接口。

使用前先 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í)行后自動進(jìn)入交互模式:

command -- --interactive

比如:

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

python arg_demo2.py double 10 -- --trace

結(jié)果如下:

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

python arg_demo2.py double 10 -- --completion

2. mando

mando 是一個基于 argparse 的裝飾器,可以讓你在幾秒內(nèi)編寫出一個靈活、可維護(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}
 echoEcho 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

再復(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 的類型提示,因此傳錯了參數(shù),也會有報(bào)錯提示:

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'

最后的話

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

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時開通

自選配置、實(shí)時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部