1
0
mirror of https://github.com/apachecn/lmpythw-zh.git synced 2025-05-28 12:02:19 +00:00
lmpythw-zh/ex28.md
wizardforcel f2bac6e6be ex28
2017-08-11 16:52:14 +08:00

48 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 练习 28`sh`
> 原文:[Exercise 28: sh](https://learncodethehardway.org/more-python-book/ex28.html)
> 译者:[飞龙](https://github.com/wizardforcel)
> 协议:[CC BY-NC-SA 4.0](http://creativecommons.org/licenses/by-nc-sa/4.0/)
> 自豪地采用[谷歌翻译](https://translate.google.cn/)
你现在将继续你的 TDD 风格流程,但你将添加一个小型的 Hack 会话来起步。使用 TDD 工作的最佳方法,实际上不是首先编写测试,而是以这种方式工作:
+ 花45分钟的时间来研究这个问题。这被称为“spike”旨在解决你可能遇到的问题或学习你需要知道的事情。
+ 使用 TODO 列表来计划你可能需要实现什么。
+ 将此计划变成 TDD 测试。
+ 运行测试来确保它失败。
+ 编写测试代码,使用你从 spike 学到的东西。
+ 审计并测试你的代码来确认质量。
当 TDD 狂热者遇到从没学过的问题时,这个过程是我看到它们实际使用的东西。快速实现一个黑魔法,让你的思维活跃,并研究问题,然后认真对待工作更加实际。如果有人告诉你这不是 TDD只是不要告诉他们你实现做了 spike 。他们永远不会知道。
## 挑战练习
在本练习中,你将实现 Unix `sh`工具的 shell 部分。你在编码时一直使用`sh`因为它在终端内部运行PowerShell 不一样),并运行其他程序。通常它是`bash`,但它可能是`fish``csh``zsh`
`sh`工具是一个需要实现的庞大的程序,因为它也支持一个完整的编程语言,来自动化你的系统。我们不会实现编程语言,只是命令行进程运行的那部分。
要完成此任务,你需要以下库:
+ [`subprocess`](https://docs.python.org/2/library/subprocess.html),启动其他程序。
+ [`readline`](https://docs.python.org/2/library/readline.html),从用户获取输入和支持历史记录。
你不用做一个带管道和所有东西的完整的 Unix `sh`,但是应该实现除编程语言之外的所有东西。你的实现应该能够执行以下操作:
+ 使用`readline`,从提示开始,并从用户获取命令来执行。
+ 将命令解析成可执行文件和参数。
+ 使用`subprocess`执行具有参数的命令,并控制所有的输出。
为了起步,你可以做你的 spike来学习`readline``subprocess `或两者,任何你认为是必要的或不熟悉的东西。一旦你完成了 spike那么你开始编写测试和实现系统。
## 研究性学习
你可以实现管道吗?就是你键入`history | grep python`,并且`|``history `的输出发给`grep`的输入。
## 深入学习
如果你打算深入了解 Unix 进程和资源管理,你可以研究我的项目[`python-lust`](https://github.com/zedshaw/python-lust)。它并不是非常大,并且充满了许多小技巧。