在本节中,我们将使用python开发命令行界面。但是在我们深入研究程序之前,让我们首先了解命令行。
由于存在计算机程序,因此一直在使用命令行,并且命令行是基于命令构建的。命令行程序是从Shell或命令行运行的程序
命令行界面提供了用户界面,可通过在终端,外壳或控制台上键入命令来导航而不是使用鼠标。
命令行界面(CLI)以可执行文件开头。我们可以根据它们的开发方式将一些参数传递给脚本,例如:
参数:我们需要提供传递给脚本的此参数。如果我们不提供它,则CLI会出现错误。例如,numpy是此命令中的参数:pip install numpy。
选项:一个可选参数,带有名称和值对,如:pip install django –cache-dir ./my-cache-dir其中–cache_dir是选项参数,应使用值./my-cache-dir作为缓存目录。
标志:另一个可选参数,它告诉脚本启用或禁用某种行为,例如–help参数。
Python提供了多个python软件包来编写命令行界面,例如“ click”。单击允许我们用很少的几行代码来构建命令行界面。
以下是不使用click包的命令行界面程序。编写CLI程序可能不如我们使用“ click”程序包获得的优雅,因为“ click”使您可以遵循“不要重复自己”(DRY)的原则。
import sys import random def do_work(): """ Function to handle command line usage""" args = sys.argv args = args[1:] # First element of args is the file name if len(args) == 0: print('You have not passed any commands in!') else: for a in args: if a == '--help': print('Basic command line program') print('Options:') print(' --help -> show this basic help menu.') print(' --monty -> show a Monty Python quote.') print(' --veg -> show a random vegetable') elif a == '--monty': print('He’s not the Messiah—he’s a very naughty boy') elif a == '--veg': print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip'])) else: print('Unrecognised argument.') if __name__ == '__main__': do_work()
输出结果
c:\Python\Python361>python cli_interp1.py --monty He’s not the Messiah—he’s a very naughty boy c:\Python\Python361>python cli_interp1.py --help Basic command line program Options: --help -> show this basic help menu. --monty -> show a Monty Python quote. --veg -> show a random vegetable c:\Python\Python361>python cli_interp1.py --veg Tomato c:\Python\Python361>python cli_interp1.py --error Unrecognised argument.
如您在以上程序中所见,更改参数名称并没有提供很大的灵活性。
下面是使用python click包实现CLI的同一程序。
import click import random @click.command() @click.option('--monty', default=False, help='Show a Monty Python quote.') @click.option('--veg', default=False, help='Show a random vegetable.') def do_work(monty, veg): """ Basic Click example will follow your commands""" if monty: print('He’s not the Messiah—he’s a very naughty boy') if veg: print(random.choice(['Tomato','Reddis','Carrot', 'Potato', 'Turnip'])) if __name__ == '__main__': do_work()
输出结果
c:\Python\Python361>python cli_interp2.py --help Usage: cli_interp2.py [OPTIONS] Basic Click example will follow your commands Options: --monty TEXT Show a Monty Python quote. --veg TEXT Show a random vegetable. --help Show this message and exit.
上面的程序显示,使用“ click”包编写CLI更加容易,并且节省了许多程序员的精力。