如何编写易于使用的直观Python程序

命令行界面(CLI):
命令行界面或命令语言解释器,也称为命令行用户界面,控制台用户界面和字符用户界面,是与计算机程序进行交互的一种方式,其中用户以以下形式向程序发出命令:连续的文本行。
通过创建命令行界面(CLI),可以使程序功能强大且具有交互性。 CLI允许您使用命令行参数(在操作系统的命令行上在程序名称之后的信息)为程序添加其他功能,从而使代码既易于使用又非常灵活。 根据程序的不同,可以使用这些参数来添加其他功能,例如查看帮助文档,指定输出文件或启用正常使用中可能有问题的测试功能。
当我第一次开始用Python进行编程时,我几乎是像这样以交互方式专门收集用户输入:
def main():
first =输入(“输入您的名字:”)
last =输入(“输入您的姓氏:”)
打印(第一+''+最后)
尽管此代码对于简单的脚本而言是不错的选择,但由于一些原因,它还是有问题的。 对于初学者,此代码不灵活。 当用户运行该程序时,它们仅受一组定义的规则的限制。 例如,如果我想将输出记录到文本文件而不是打印到控制台该怎么办? 作为新用户,我如何确定程序的工作方式? 作为开发人员,您可以创建命令行界面来提供针对这些问题的解决方案。
重要注意事项
创建CLI时,请注意以下几点:
- 必需参数 :为了使程序运行,绝对需要哪些参数? 例如,如果我正在编写一个程序来抓取网页,则必需的参数可能是页面的域。
- 文档 :写出每个选项和参数的功能很重要,这样新用户才能弄清楚程序的工作方式。
- 处理错误情况 :让用户确切知道出了什么问题以及出了什么地方
- 运行时状态 :如果任务没有立即完成,则应打印出当前进度
使用argparse读取参数
Argparse是用于解析命令行参数的Python标准库模块。 您作为程序员可以定义将要采用的参数,而argparse会找出如何从sys.argv中解析这些参数(Python中的列表,其中包含传递给脚本的命令行参数,在此处了解更多信息)。 当用户为程序提供无效参数时,Argparse还会自动生成帮助和使用情况消息并输出错误。 它非常易于使用,并且使编写直观的CLI变得非常容易。
首先,创建一个名为test_cli.py的新文件,并导入模块并初始化一个新的解析器:
导入 argparse
解析器= argparse.ArgumentParser()
parser.parse_args()
现在使用--help选项运行代码:
python3 test_cli.py --help
您应该收到一个不错的默认帮助消息,如下所示:
用法:test_cli.py [-h]
可选参数:
-h,--help显示此帮助消息并退出
恭喜,您已经建立了第一个命令行界面!
现在,让我们添加一个欢迎消息,以简短地让您的用户知道该程序的作用:
welcome =“练习创建交互式命令行界面”
解析器= argparse.ArgumentParser( description = welcome )
parser.parse_args()
现在,使用-h标志运行该程序。 您应该能够看到您喜欢的欢迎消息。
现在,让我们做一些更有用的事情。
添加参数
假设我们正在编写一个程序来抓取网页。 我们可能需要的一些参数是网页的域--domain或-d ,用于将输出记录到out文件中的选项--ofile或-o ,以及用于将特定数量的输出行打印到控制台的选项--lines或-l 。 对于此示例,我们将使domain参数成为必需,而ofile和lines参数将是可选的。
我们可以使用.add_argument轻松地将其他参数添加到argparse CLI,这将使我们定义用法详细信息。 我们可以这样添加所需的参数--domain :
parser.add_argument('-domain','-d', 必填 = True, 帮助 ='您要抓取的网站的域名。即“ https://ahadsheriff.com”')
现在,使用-h参数运行程序以查看您编写的文档!
由于--domain是必填参数,因此请尝试在没有任何标志的情况下运行该程序,系统将显示以下消息:
用法:test_cli.py [-h] --domain DOMAIN
test_cli.py:错误:需要以下参数:--domain / -d
有用!
是时候使用argparse添加其他参数了。 如果您未指定需要哪些参数,则argparse将假定它们是可选的。 您还可以设置参数的类型,对于--lines我们将使用整数。 您可以为.add_argument设置其他有用的选项,例如action = ,您可以在这里的argparse官方文档中了解更多信息。
parser.add_argument('-ofile','-o', help ='定义输出文件以保存标准输出的结果。即“ output.txt”')
parser.add_argument('-lines','-l', help ='要打印到控制台的输出行数“'', 键入 = int )
现在测试您的代码,以确保一切正常。 一种简单的方法是将参数的值存储为变量,然后打印这些值。
args = parser.parse_args()
域= args.domain
ofile = args.ofile
行= args.lines
打印(“域:”,域)
打印(“输出文件:”,ofile)
打印(“行:”,行)
注意:可选参数在不使用时默认存储为“无”。
这是我所有的代码:
结论
虽然这不是一个全面的指南,但足以让您考虑命令行界面并改善脚本的用户体验。 毕竟,如果没有人能够使用它,那么代码的重点是什么。 如果您还有其他建议,技巧或资源,请分享评论!