扣丁学堂Python基础教程之解析3个Python命令行工具

2018-07-10 13:59:51 517浏览

在现如今,大多数IT程序员工作来说一个命令行工具就足以胜任,首先命令行工具是一种从你的shell或者终端之类的地方交互或运行的程序。Git和Curl就是两个你也许已经很熟悉的命令行工具,下面我们来看一下关于Python基础教程之解析3个Python命令行工具的介绍吧。


Click

Click是我们最爱的用来开发命令行工具的Python包。其:

有一个富含例子的出色文档

包含说明如何将命令行工具打包成一个更加易于执行的Python应用程序

自动生成实用的帮助文本

使你能够叠加使用可选和必要参数,甚至是多个命令

有一个Django版本(django-click)用来编写管理命令

Click使用@click.command()去声明一个函数作为命令,同时可以指定必要和可选参数。

  #hello.py
  importclick
  @click.command()
  @click.option('--name',default='',help='Yourname')
  defsay_hello(name):
  click.echo("Hello{}!".format(name))
  if__name__=='__main__':
  say_hello()
  @click.option()修饰器声明了一个可选参数,而@click.argument()修饰器声明了一个必要参数。你可以通过叠加修饰器来组合可选和必要参数。echo()方法将结果打印到控制台。
  $pythonhello.py--name='Lacey'
  HelloLacey!

Docopt

Docopt是一个命令行工具的解析器,类似于命令行工具的Markdown。如果你喜欢流畅地编写应用文档,在本文推荐的库中Docopt有着最好的格式化帮助文本。它不是我们最爱的命令行工具开发包的原因是它的文档犹如把人扔进深渊,使你开始使用时会有一些小困难。然而,它仍是一个轻量级的、广受欢迎的库,特别是当一个漂亮的说明文档对你来说很重要的时候。

Docopt对于如何格式化文章开头的docstring是很特别的。在工具名称后面的docsring中,顶部元素必须是Usage:并且需要列出你希望命令被调用的方式(比如:自身调用,使用参数等等)。Usage:需要包含help和version参数。

docstring中的第二个元素是Options:,对于在Usages:中提及的可选项和参数,它应当提供更多的信息。你的docstring的内容变成了你帮助文本的内容。

  """HELLOCLI
  Usage:
  hello.py
  hello.py
  hello.py-h|--help
  hello.py-v|--version
  Options:
  Optionalnameargument.
  -h--helpShowthisscreen.
  -v--versionShowversion.
  """
  fromdocoptimportdocopt
  defsay_hello(name):
  return("Hello{}!".format(name))
  if__name__=='__main__':
  arguments=docopt(__doc__,version='DEMO1.0')
  ifarguments['']:
  print(say_hello(arguments['']))
  else:
  print(arguments)

在最基本的层面,Docopt被设计用来返回你的参数键值对。如果我不指定上述的name调用上面的命令,我会得到一个字典的返回值:

$pythonhello.py
{'--help':False,
'--version':False,
'':None}

这里可看到我没有输入help和version标记并且name参数是None。

但是如果我带着一个name参数调用,say_hello函数就会执行了。

$pythonhello.pyJeff
HelloJeff!

Docopt允许同时指定必要和可选参数,且各自有着不同的语法约定。必要参数需要在ALLCAPS和中展示,而可选参数需要单双横杠显示,就像--like。更多内容可以阅读Docopt有关patterns的文档。

Fire

Fire是谷歌的一个命令行工具开发库。尤其令人喜欢的是当你的命令需要更多复杂参数或者处理Python对象时,它会聪明地尝试解析你的参数类型。

Fire的文档包括了海量的样例,但是我希望这些文档能被更好地组织。Fire能够处理同一个文件中的多条命令、使用对象的方法作为命令和分组命令。

它的弱点在于输出到控制台的文档。命令行中的docstring不会出现在帮助文本中,并且帮助文本也不一定标识出参数。

importfire
defsay_hello(name=''):
return'Hello{}!'.format(name)
if__name__=='__main__':
fire.Fire()

参数是必要还是可选取决于你是否在函数或者方法定义中为其指定了一个默认值。要调用命令,你必须指定文件名和函数名,比较类似Click的语法:

$pythonhello.pysay_helloRikki
HelloRikki!

你还可以像标记一样传参,比如--name=Rikki。

Click包含了使用setuptools打包命令行工具的使用说明(强烈推荐按照说明操作)。

要打包我们第一个例子中的命令行工具,将以下内容加到你的setup.py文件里:

  fromsetuptoolsimportsetup
  setup(
  name='hello',
  version='0.1',
  py_modules=['hello'],
  install_requires=[
  'Click',
  ],
  entry_points='''
  [console_s]
  hello=hello:say_hello
  ''',
  )

任何你看见hello的地方,使用你自己的模块名称替换掉,但是要记得忽略.py后缀名。将say_hello替换成你的函数名称。

然后,执行pipinstall--editable来使你的命令在命令行中可用。

现在你可以调用你的命令,就像这样:

$hello--name='Jeff'
HelloJeff!

通过打包你的命令,你可以省掉在控制台键入pythonhello.py--name='Jeff'这种额外的步骤以减少键盘敲击。这些指令也很可能可在我们提到的其他库中使用。


以上就是扣丁学堂Python培训之解析3个Python命令行工具讲解,希望对小伙伴所有帮助。想要了解更多内容的小伙伴可以登录扣丁学堂官网咨询。扣丁学堂是专业的Python培训班,不仅有专业的老师和与时俱进的课程体系,还有大量的Python视频教程供学员观看学习哦。扣丁学堂Python技术交流群:279521237。

扣丁学堂微信公众号



关注微信公众号获取更多学习资料



查看更多关于"Python开发资讯"的相关文章>

标签: Python视频教程 Python基础教程 Python爬虫 Python培训 Python开发工程师

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号