# 练习 4:处理命令行参数
> 原文:[Exercise 4: Dealing with Command Line Arguments](https://learncodethehardway.org/more-python-book/ex4.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
在你能处理本书的第一部分之前,你需要完成一些简单的黑魔法,教你如何使用 Python 中的命令行参数。
传统上我们称这种黑魔法为“spike”。该术语来自于一个小型测试项目,涵盖了更大的流程或项目的所有元素。这个小型测试黑魔法“spike”通过一切手段,来确保你可以使用它。spike 的目的是,通过排练来了解如何使用一些新的库或工具,然后真正在你的项目中使用它。
这也是第一个具有“挑战性”的练习。挑战性旨在让你了解如何做某事,然后你可以看看我如何做的,并与你的工作进行比较。我不会先给你代码,并且你需要把它写出来。你不再是初学者了。你现在正在阅读一个挑战,然后你必须解决它。
> 警告
> 仔细阅读这个警告!你不应该在 45 分钟内完成完整的发行版软件。45 分钟的时间限制是让你尽快开始,并且不要担心你会做错事情。它是你工作的助推器,而不是测试。这意味着,如果你遵循 45 分钟的时间框架,然后暂停,因为你认为,你不能完成一个伟大的、美丽的作品,你就是做错了。你应该看看,“我们来看看我能在45分钟内完成什么”。这些练习是开放式的,因为不同的人在给定的时间内完成不同的工作量。你只是使用时间约束,来找出你的工作方式,而不是弄清楚你是一个糟糕的程序员还是一个伟大的程序员。
## 挑战练习
你要编写两个小的 Python 脚本,它们使用两种方法来测试处理命令行参数:
+ 普通的旧式`sys.argv`,像往常一样。
+ Python 的`argparse`包,用于更花式的参数处理。
你的测试脚本应该能够处理以下情况:
+ 通过`--help`或`-h`获得帮助。
+ 至少有三个参数是标志,这意味着它们不需要一个额外的参数,只是将它们放在命令行上就可以了。
+ 至少有三个参数是选项,这意味着,它们会在你的脚本中接受一个参数并将一个变量设为它。
+ 额外的“位置”参数,这是文件的列表,在所有`--`风格参数的末尾,并能处理终端通配符`*/.txt`。
因为这个练习是一个 spike,你应该这样,如果你在测试过程中感到痛苦,你可以放弃它并尝试另一件事。开始尝试用`sys.argv`解决这个问题,然后如果你不能想出来,尝试使用`argparse`。
记住,这是一个45分钟的定时练习,你需要坚持下去。你还必须跟踪你做的所有事情来开始。这个练习的目的是,弄清楚如何继续以自己的方式开始一个项目。甚至在你开始之前,你是否在劝阻自己?你是否不知道你的文本编辑器在哪里或如何使用它?写下来,然后弄清楚如何去除这个障碍。
但是,不要将这个严格的45分钟练习与失败混淆。你正在尝试在45分钟内做任何事情。如果你的技术水平是这样的,你完成了一个`ex4.py`文件,没有别的,那么你在45分钟内做了一些事情。然后,你应该看看为什么所做的一切都是开始编写这个文件,弄清楚下一步需要做什么,然后尝试另一个45分钟的流程。
## 答案
为了防止你作弊,所有答案的代码都在本书的项目网站 <http://bit.ly/lmpthwsolve> 上,该网站托管在 <https://github.com/> 上。而不是将代码包含在这里,所以你想作弊的时候,只是稍微看一下它,你就必须去查看项目,并访问`ex4`目录,看看我是如何实现这个黑魔法的。你还会发现我的笔记,我是如何开始,以及改进。
> 警告
> 如果你遇到了障碍,回到第三部分,使用我提供的 Early Coders 中的流程。你需要列出一个清单,执行它,并检查你所做的事情。就是这样。
## 研究性学习
+ 有多少其他的 Python 参数解析库?有没有你喜欢的?
+ `argparse`与`sys.argv`相比,主要优势是什么。
+ 在项目启动方法中,你可以改进什么?有什么可以去掉的事情吗?
- 笨办法学 Python · 续 中文版
- 引言
- 第一部分:预备知识
- 练习 0:起步
- 练习 1:流程
- 练习 2:创造力
- 练习 3:质量
- 第二部分:简单的黑魔法
- 练习 4:处理命令行参数
- 练习 5:cat
- 练习 6:find
- 练习 7:grep
- 练习 8:cut
- 练习 9:sed
- 练习 10:sort
- 练习 11:uniq
- 练习 12:复习
- 第三部分:数据结构
- 练习 13:单链表
- 练习 14:双链表
- 练习 15:栈和队列
- 练习 16:冒泡、快速和归并排序
- 练习 17:字典
- 练习 18:性能测量
- 练习 19:改善性能
- 练习 20:二叉搜索树
- 练习 21:二分搜索
- 练习 22:后缀数组
- 练习 23:三叉搜索树
- 练习 24:URL 快速路由
- 第四部分:进阶项目
- 练习 25:xargs
- 练习 26:hexdump
- 练习 27:tr
- 练习 28:sh
- 练习 29:diff和patch
- 第五部分:文本解析
- 练习 30:有限状态机
- 练习 31:正则表达式
- 练习 32:扫描器
- 练习 33:解析器
- 练习 34:分析器
- 练习 35:解释器
- 练习 36:简单的计算器
- 练习 37:小型 BASIC
- 第六部分:SQL 和对象关系映射
- 练习 38:SQL 简介
- 练习 39:SQL 创建
- 练习 40:SQL 读取
- 练习 41:SQL 更新
- 练习 42:SQL 删除
- 练习 43:SQL 管理
- 练习 44:使用 Python 的数据库 API
- 练习 45:创建 ORM
- 第七部分:大作业
- 练习 46:blog
- 练习 47:bc
- 练习 48:ed
- 练习 49:sed
- 练习 50:vi
- 练习 51:lessweb
- 练习 52:moreweb