1、对付win32与linux目录分隔符不同的办法:
if os.platform == win32 :
DIAGONAL = ""
else : DIAGONAL = "/"
|
2、不要在子函数中直接退出整个程序。所有的退出整个程序的命令最好都在主函数中。
3、将错误信息输出到标准错误输出设备。以便其它程序在处理错信息时能处理最少的信息量。
4、对于不用的已打开文件要及时关闭。以便其它程序修改该文件。
5、如果修改一个文件只是一个程序所需要的,就在这个程序完成时及时的恢复原来的文件内容。
不要擅自改动别的程序可能要用到的文件,因为他很可能不知道你已经把他的文件改动了。
6、对于缩写尽量都做出解释
7、关于调用外部程序时的输出流的处理
在调用外部程序时,我们可能会用一个线程去监听这个外部程序的输出信息(输出流),但是这种情况下有可能出现外部已经运行,但是却得不到外部程序的输出。
具体情况如上图,这个时候,如果B程序自己在调用C之前向输出流输出一些信息时,监听线程可能就得不到B的输出。
原因分析:我们说程序或线程都是在系统中并行运行的,但是这是从宏观上说的,从微观上来说,如果我们只有一个CPU,那么所有的指令都是串行的,也就是说在B程序调用C程序这个指令时,可能A程序的监听线程还只是在监听几十个指令之前,监听线程得到的输出是几十个指令之前的输出,也就是说是过去的,现在B程序调用C程序了,并且做了输出流的重定向,开始运行C程序了,系统的调度器激活监听线程,这个时候监听线程发现标准输出流没有内容(因为被重定向了),所以它认定B没有向标准输出流输出信息,这时,它就“漏”了一部分B输出的信息,只有当B恢复标准输出流时,它才能得到B在调用C之前的输出信息。
解决办法:B在调用C之前,清空一次标准输出流,伪码如下:
stdout.flush()
这就强迫系统对缓冲区清空,B的输出信息就能及时输出到标准缓冲区。
所以在调用外部程序时,如果要对标准输出流重定向,一定要将标准输出流做一次清空处理。
8、在一个项目的设计之后,编码之前,我觉得应该做的事,这里是指简单的项目
a、要有一个主程序文件 main,然后是util global README
b、灵活的日志系统
c、对于输出信息的控制:主要是调试信息的输出开关
d、异常体系
e、注释方案
9、如果程序中经常涉及目录的切换则不太适合用多线程,而应该用多进程,因为对于多线程而言,当一个线程切换了工作目录时,其它线程得到的当前工作目录就是这个切换后的工作目录。
10、多进程不太利于全局变量的共享,当一个进程被创建时,父进程的所有的全局变量就不能被子进程所使用
11、全局变量不是害虫,在一个工程里是必然存在的,如果把全局变量写成了局部变量,那么在代码的其它部分很有可能会造成代码的冗余与混乱。
阅读(477) | 评论(0) | 转发(0) |