14.10 练习

14-1.可调用对象。说出Python中的可调用对象。exec语句和内建函数eval()有什么不同?

14-2.input()和raw.input()。内建函数raw_input()和input()有什么不同?

14-3.执行环境。创建运行其他Python脚本的Python脚本。

14-4.os.system()。选择熟悉的系统命令,该命令执行任务时不需要输入,也不输出到屏幕或根本不输出任何东西。调用os.system()运行程序附加题:你的解决方案移植到subprocess.call()。

14-5.commands.getoutput()。用commands.getoutput()解决前面的问题。

14-6.popen()家族。选择熟悉的系统命令,该命令从标准输入获得文本,操作或输出数据。使用os.popen()与程序进行通信。输出到哪儿呢?使用popen2.popen2()代替。

14-7.subprocess模块。把先前问题的解决方案移植到subprocess模块。

14-8.exit函数。设计一个在程序退出时的函数。安装到sys.exitfunc(),运行程序,演示你exit函数确实被调用了。

14-9.shells。创建shell(操作系统接口)程序。给出接受操作系统命令的命令行接口(任意平台)。

附加题1:支持管道(见os模块中的dup()、dub2()和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()家族函数有什么不同?哪一组的功能更强?

14-11.生成和执行Python代码。用funcAttrs.py脚本(例14.4)加入测试代码到已有程序的函数中。创建一个测试框架,每次遇到你特殊的函数属性,它都会运行你的测试代码。