# 練習 25:`xargs`
> 原文:[Exercise 25: xargs](https://learncodethehardway.org/more-python-book/ex25.html)
> 譯者:[飛龍](https://github.com/wizardforcel)
> 協議:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻譯](https://translate.google.cn/)
我們回到挑戰模式的練習,并為你熱身,你將會實現`xargs`。這應該是一個簡單的實現,但是`xargs`可能很復雜,因為你需要啟動其他程序才能使其運行。你要研究的 Python 模塊是[`subprocess`](https://docs.python.org/2/library/subprocess.html),可以從 Python 運行其他程序并收集其輸出。你將需要了解該模塊,稍后完成`xargs`和本書的許多其他項目,因此要好好研究。
## 挑戰練習
實現`xargs`只需 45 分鐘,所以你可以做出一些東西,之后你可以審計它。記住第一個 Hack 就是讓項目能運行,而不是使其完美。你將在此項目中的后續步驟中優化它并使其更好。記住你可以鍵入:
```
man xargs
```
獲取`xargs`的手冊頁并研究如何工作。這是一個方便的 Unix 工具,但你也可以使用`find`做幾乎相同的事情。當你實現`xargs`時,嘗試找出,它比起`find --exec`有什么優勢。
經過 45 分鐘的 Hack,你應該休息一下,然后使用第三部分的代碼審計檢查清單,對代碼進行客觀的審計。不要修復代碼,只需編寫注釋,指出需要改變什么,有什么缺陷。在嘗試修復時,很難保持客觀,所以只需要注意審計中的問題,然后在下一輪中修復它們。
然后,你將進行一系列代碼/審計的計時會話,來習慣于進行審計。花費你所需的盡可能長的時間,盡可能多地實現`xargs`,然后繼續下一個項目。
> 注
> 記住要在日志中跟蹤你的缺陷,所以你可以繪制它們的運行圖,并尋找趨勢。
## 研究性學習
+ 在代碼/審計的流程中,你是否發現任何你不斷犯下的錯誤?把這些當成潛在的事情寫下來并處理。
+ 你的代碼/審計流程中,是否有一個特定的時間點,有或多或少的缺陷?比起最開始更多,還是三到四個流程之后更多?為什么會這樣?
+ 嘗試為你的`xargs`的實現編寫自動測試,并查看是否降低你的缺陷率。在下一個練習中,你將會進行一個更加受控的測試研究,就像這樣,但是現在嘗試一下,看看你發現了什么。
- 笨辦法學 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