# 練習 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