python 一個命令行的組件click

最近寫python的代碼比較多,一個比較明顯的問題就是python的代碼都是腳本,發佈時由於腳本的緣故導致一堆的文件,很不方便,看了pyinstaller貌似3.6的可以打包成一個可執行文件。

到這一步需要一個-v的過程來表明當前程序是哪天打的包,gitlab的序列號是多少,以求得發佈包的唯一性和可驗證性。

顯然,一個比較簡單的命令行的框架就呼之欲出了

假設文件爲demo.py

期望調用python demo.py -v顯示版本

python demo.py -h顯示幫助信息

python demo.py run執行正式的程序

代碼如下:

import click


def _show_version():
    click.echo('Version 1.0.1')


def print_version(ctx, param, value):
    if not value or ctx.resilient_parsing:
        return
    _show_version()
    ctx.exit()


@click.group()
@click.help_option('-h', '--help')
@click.option('-v', '--version', is_flag=True, callback=print_version,
              expose_value=False, is_eager=True, help='show app version.')
def cli():
    pass


@cli.command(help='show app version.')
def version():
    _show_version()


@cli.command(help='run app.')
def run():
    print("run")


if __name__ == '__main__':
    cli()

這樣,一個帶命令行參數,能夠顯示version的簡單框架即完成了。

注意的是, _show_version函數特意寫簡單了,正式的版本中應該是在打包之前獲取到當天時間,配置文件中的版本號,gitlab中的前7位序列號,組成一個版本字符串存於某個version.txt中,每打一次包就運行一次前面的邏輯,打包後的程序再調用_show_version函數 將version.txt中的字符串讀出並顯示出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章