这是自己做的练习,可能有错误,欢迎讨论和各种优化重构方案。
根据反馈,或者code review,对本篇文章答案或者相关内容的更新补充,一般会被添加在本篇博客的评论中。
将尽量保证每题的答案代码是完整的,不仅仅是函数,类或者只是个大概,力求打开Python 2.7的IDLE,将代码完整拷贝进去,就能调试运行。
欢迎访问Balian在博客园的家。 http://www.cnblogs.com/balian
【这篇博文可能让人失望,对不起】
14-9.
Shells。创建shell(操作系统接口)程序。给出接受操作系统命令的命令行接口(任意平台)。
附加题1:支持管道(见os模块中的dup(),dup2()和pipe()函数)。管道过程允许进程的标准输入连接到另一个进程的标准输入。
附加题2:用括号支持逆序的管道,给shell一个函数式编程接口。换句话说,支持更加函数式风格,如sort(grep(ps (-ef), root), -n, +1),而不是ps -ef | grep root | sort -n +1这样的命令。
【未完】
感觉有难度,暂时押后。
14-10.
fork()/exec*()和spawn*()的比较。使用fork()-exec*()对和spawn*()家族函数有什么不同?那一组的功能更强?
【未完】
感觉有难度,暂时押后。但可以参考书第429页表14.6以及
http://blog.csdn.net/small_tina/article/details/8071791
14-11.
生成和执行Python代码。用funcAttrs.py脚本(例14.4-实际应该是14.2,书第425页)加入测试代码到已有程序的函数中。创建一个测试框架,每次遇到你特殊的函数属性,它都会运行你的测试代码。
【未完】
感觉有难度,暂时押后。funcAttrs.py脚本代码如下:
def foo(): return True def bar(): 'bar() does not do much' return True foo.__doc__ = 'foo() does not do much' foo.tester=''' if foo(): print 'PASSED' else: print 'FAILED' ''' for eachAttr in dir(): obj = eval(eachAttr) if isinstance(obj, type(foo)): if hasattr(obj, '__doc__'): print '\nfunction "%s" has a doc string:\n\t%s' % (eachAttr, obj.__doc__) if hasattr(obj, 'tester'): print 'function "%s" has a tester... executing' % eachAttr exec obj.tester else: print 'Function "%s" has no tester... skip ping' % eachAttr else: print '"%s" is not a function' % eachAttr
【执行结果】
"__builtins__" is not a function "__doc__" is not a function "__file__" is not a function "__name__" is not a function "__package__" is not a function function "bar" has a doc string: bar() does not do much Function "bar" has no tester... skip ping function "foo" has a doc string: foo() does not do much function "foo" has a tester... executing PASSED