这是自己做的练习,可能有错误,欢迎讨论和各种优化重构方案。
根据反馈,或者code review,对本篇文章答案或者相关内容的更新补充,一般会被添加在本篇博客的评论中。
将尽量保证每题的答案代码是完整的,不仅仅是函数,类或者只是个大概,力求打开Python 2.7的IDLE,将代码完整拷贝进去,就能调试运行。
欢迎访问Balian在博客园的家。 http://www.cnblogs.com/balian
14-5.
commands.getoutput()。用commands.getoutput()解决前面的问题。
【答案】
commands.getoutput()在unix平台才能运行。参考http://bugs.python.org/issue15073
曾经尝试在linux的Python 2.5中运行该模块,同样发现语法问题。因为
Deprecated since version 2.6: The commands module has been removed in Python 3. Use the subprocess module instead.
14-6.
popen()家族。选择熟悉的系统命令,该命令从标准输入获得文本,操作或输出数据。(a)使用os.popen()与程序进行通信。输出到哪儿呢?(b)使用popen2.popen2()代替。
【答案】
(a)代码如下:
>>> import os >>> command = input('Please input a DOS command: ... ') Please input a DOS command: ... 'dir' >>> k = os.popen(command) >>> k <open file 'dir', mode 'r' at 0x0000000002111420> >>> print k.read() #该语句可以读出dir的实际输出
(b)代码如下:
>>> command = 'dir' >>> import popen2 >>> pipe_in, pipe_out = popen2.popen2(command) >>> pipe_in.readlines() #这里会输出命令dir的结果。 >>> pipe_in.close()
【参考】
http://www.360doc.com/content/12/0131/16/2660674_183157204.shtml
http://linhs.blog.51cto.com/370259/126831
14-7.
subprocess模块。把先前问题的解决方案移植到subprocess模块。
【答案】
>>> import subprocess
>>> k = subprocess.call('dir', shell = True)
#这里会输出命令dir的结果。
>>> k
0 #这表示命令正确执行了
14-8.
exit函数。设计一个在程序退出时的函数。安装到sys.exitfunc(),运行程序,演示你的exit函数确实被调用了。
【注】
这里附一个英文版书中的原题。
【答案】
代码如下:
import sys def my_exit(): print 'World' sys.exitfunc = my_exit print 'Hello' sys.exit(1) print 'there'
【参考】
http://effbot.org/librarybook/sys-exitfunc-example-1.py