在 python 程序中,有可能会需要运行外部的程序, python 的 subprocess 模块就是用来做这个事的。 Subprocess 模块旨在替代原来较老的 os.system,os.spawn*, os.popen* 等模块。
现在想要的一个功能是自动运行一批程序,然后将这一批程序运行过程中记录的调试信息统一放在一个目录下,实行半自动的测试,运行完成后,只需要在指定的特定目录下查看所有程序的运行结果即可。因为每个程序都在不同的目录,如果要靠人手工一个一个地去执行,还真有点麻烦。这个时候, python 及其附带的丰富的库就派上用场了。
本来以为 python 中会有 timer, 没想到没有,只在 thread.timer 中有。后面找了下资料,发现有小伙已经弄出来了。基本上不用修改能达到要求。
只是现在还有一个疑问,如果是如上的 notepad 程序则可以运行一段时间后关闭,而如果改成 write.exe (即写字板),则不能用了, TerminiateProcess 的时候出错,暂时未找到原因。
除此之外,还需要把结果拷贝到特定的目录中,这些就只涉及一些 string 的操作及 shutil 中的内容了。这部分就不写了。
调试经验:现在变得只喜欢用 print 了,发现除了 python 在运行时会检定语法再加上 emacs 的高亮,基本上出错几率比较少,剩下的就是逻辑错了,而逻辑错通过 print 来输出结果查看也已经足够了。这一点甚至现在在用 C++ 写程序的时候也就用这个了,因为写图形程序好多东西转瞬即逝,如果用平常的 debug 版本来调的话,不仅速度慢,而且调试的效率也不高。不如直接 printf 和 log 结合起来还更快定位错误。
Ref:
http://betabug.ch/blogs/ch-athens/1093