練習(xí) 4:處理命令行參數(shù)
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
自豪地采用谷歌翻譯
在你能處理本書的第一部分之前,你需要完成一些簡(jiǎn)單的黑魔法,教你如何使用 Python 中的命令行參數(shù)。
傳統(tǒng)上我們稱這種黑魔法為“spike”。該術(shù)語來自于一個(gè)小型測(cè)試項(xiàng)目,涵蓋了更大的流程或項(xiàng)目的所有元素。這個(gè)小型測(cè)試黑魔法“spike”通過一切手段,來確保你可以使用它。spike 的目的是,通過排練來了解如何使用一些新的庫或工具,然后真正在你的項(xiàng)目中使用它。
這也是第一個(gè)具有“挑戰(zhàn)性”的練習(xí)。挑戰(zhàn)性旨在讓你了解如何做某事,然后你可以看看我如何做的,并與你的工作進(jìn)行比較。我不會(huì)先給你代碼,并且你需要把它寫出來。你不再是初學(xué)者了。你現(xiàn)在正在閱讀一個(gè)挑戰(zhàn),然后你必須解決它。
警告
仔細(xì)閱讀這個(gè)警告!你不應(yīng)該在 45 分鐘內(nèi)完成完整的發(fā)行版軟件。45 分鐘的時(shí)間限制是讓你盡快開始,并且不要擔(dān)心你會(huì)做錯(cuò)事情。它是你工作的助推器,而不是測(cè)試。這意味著,如果你遵循 45 分鐘的時(shí)間框架,然后暫停,因?yàn)槟阏J(rèn)為,你不能完成一個(gè)偉大的、美麗的作品,你就是做錯(cuò)了。你應(yīng)該看看,“我們來看看我能在45分鐘內(nèi)完成什么”。這些練習(xí)是開放式的,因?yàn)椴煌娜嗽诮o定的時(shí)間內(nèi)完成不同的工作量。你只是使用時(shí)間約束,來找出你的工作方式,而不是弄清楚你是一個(gè)糟糕的程序員還是一個(gè)偉大的程序員。
挑戰(zhàn)練習(xí)
你要編寫兩個(gè)小的 Python 腳本,它們使用兩種方法來測(cè)試處理命令行參數(shù):
- 普通的舊式
sys.argv,像往常一樣。 - Python 的
argparse包,用于更花式的參數(shù)處理。
你的測(cè)試腳本應(yīng)該能夠處理以下情況:
- 通過
--help或-h獲得幫助。 - 至少有三個(gè)參數(shù)是標(biāo)志,這意味著它們不需要一個(gè)額外的參數(shù),只是將它們放在命令行上就可以了。
- 至少有三個(gè)參數(shù)是選項(xiàng),這意味著,它們會(huì)在你的腳本中接受一個(gè)參數(shù)并將一個(gè)變量設(shè)為它。
- 額外的“位置”參數(shù),這是文件的列表,在所有
--風(fēng)格參數(shù)的末尾,并能處理終端通配符*/.txt。
因?yàn)檫@個(gè)練習(xí)是一個(gè) spike,你應(yīng)該這樣,如果你在測(cè)試過程中感到痛苦,你可以放棄它并嘗試另一件事。開始嘗試用sys.argv解決這個(gè)問題,然后如果你不能想出來,嘗試使用argparse。
記住,這是一個(gè)45分鐘的定時(shí)練習(xí),你需要堅(jiān)持下去。你還必須跟蹤你做的所有事情來開始。這個(gè)練習(xí)的目的是,弄清楚如何繼續(xù)以自己的方式開始一個(gè)項(xiàng)目。甚至在你開始之前,你是否在勸阻自己?你是否不知道你的文本編輯器在哪里或如何使用它?寫下來,然后弄清楚如何去除這個(gè)障礙。
但是,不要將這個(gè)嚴(yán)格的45分鐘練習(xí)與失敗混淆。你正在嘗試在45分鐘內(nèi)做任何事情。如果你的技術(shù)水平是這樣的,你完成了一個(gè)ex4.py文件,沒有別的,那么你在45分鐘內(nèi)做了一些事情。然后,你應(yīng)該看看為什么所做的一切都是開始編寫這個(gè)文件,弄清楚下一步需要做什么,然后嘗試另一個(gè)45分鐘的流程。
答案
為了防止你作弊,所有答案的代碼都在本書的項(xiàng)目網(wǎng)站 http://bit.ly/lmpthwsolve 上,該網(wǎng)站托管在 https://github.com/ 上。而不是將代碼包含在這里,所以你想作弊的時(shí)候,只是稍微看一下它,你就必須去查看項(xiàng)目,并訪問ex4目錄,看看我是如何實(shí)現(xiàn)這個(gè)黑魔法的。你還會(huì)發(fā)現(xiàn)我的筆記,我是如何開始,以及改進(jìn)。
警告
如果你遇到了障礙,回到第三部分,使用我提供的 Early Coders 中的流程。你需要列出一個(gè)清單,執(zhí)行它,并檢查你所做的事情。就是這樣。
研究性學(xué)習(xí)
- 有多少其他的 Python 參數(shù)解析庫?有沒有你喜歡的?
-
argparse與sys.argv相比,主要優(yōu)勢(shì)是什么。 - 在項(xiàng)目啟動(dòng)方法中,你可以改進(jìn)什么?有什么可以去掉的事情嗎?