$ python xxx.py args1 | tee -a out/xxx.log
上面那条命令的含义就是,将xxx.py这个python文件中print()原本输出到console的内容重定向到"out/xxx.log"文件中。(“>>”是追加,“>”是直接写入,即会发生覆盖);
下面那条也差不多,使用了tee命令,在保证xxx.py文件运行时将print内容输出到控制台的同时,还把这些内容保存在"out/xxx.log"文件中。
但有的时候会发生比较蛋疼的情况,那就是可能要间隔很久,你才会看到你的"out/xxx.log"中有内容;或者控制台才有内容显示。这是为啥呢?
这是因为在python中,重定向和输出到控制台的内容会先被存在缓冲区中暂存,当它遇到换行符“\n”,或者缓存区的数据积累到一定的量的时候,就会将内容写到重定向的文件或者控制台中。
那么如果我要即时写入文件,不想要延迟怎么办?
1. python的print()函数有个参数叫"flush",将它设为True,程序运行到该条输出内容时就会将缓存区的内容写出一次
。即
print("HERE!!!", flush=True)
2. 命令行运行py文件的时候,加上一个命令行参数"-u"。
即
python -u xxx.py args1 >> out/xxx.log
3. 你在哪里想让缓存区的内容输出,就在哪里加上这句话:
sys.stdout.flush()
每当程序运行到这句话,就将缓存中的内容输出到控制台,或者重定向的文件
还有一个想提一句的小问题——既然python的print()内容都是先输出到缓存区的,那为什么直接运行含有print()函数的python程序,print()的内容都是即时输出到控制台,没有延迟呢?
那是因为,print()函数有个指定关键字参数,即我们看到的print(),其实是print(end="\n"),所以每次输出后会自动换行。而python的stdout默认看到换行符就输出,所以print()函数的内容总是即时输出到控制台的。当然,当你把它重定向到文件中的时候,就不是这样咯。
有时候,我们会写这样的命令行,让python结果重定向输出到某个日志文件中:$ python xxx.py args1 >> out/xxx.log$ python xxx.py args1 | tee -a out/xxx.log上面那条命令的含义就是,将xxx.py这个python文件中print()原本输出到console的内容重定向到"out/xxx.log"文件...
日志是跟踪软件运行时所发生的事件的一种方法。软件开发者在代码中调用日志函数,表明发生了特定的事件。事件由描述性消息描述,该描述性消息可以可选地包含可变数据(即,对于事件的每次出现都潜在地不同的数据)。事件还具有开发者归因于事件的重要性;重要性也可以称为级别或严重性。
logging提供了一组便利的函数,用来做简单的日志。它们是 debug()、 info()、 warning()、 error() 和 critical()。
logging函数根据它们用来跟踪的事件的级别或严重程度来命名。标准级别及其适用性描述如下(以严重程度递增排序):
转自:http://blog.csdn.net/silyvin/article/details/8281342
一个项目中需要迭代计算,时间长,但是在
重定向
输出
的时候所有标准
输出
不能及时
输出
,这就要求
程序
主函数正常运行完后才能正常
输出
到
文件
。
因为标准
输出
到终端时默认行缓冲或无缓冲,
重定向
到硬盘之后,就变成了全缓冲
1. Fully buffered means that I/O t
What?在
Python
程序
中,使用 print
输出
调试信息的做法非常常见,但有的时候我们需要将 print 的内容改写到其他位置,比如一个
文件
中,便于随时排查。但是又不希望大面积替换 print 函数,这就需要一些技巧实现。一种典型的做法是在代码开始的地方增加这样的代码:def log_to_file(* args):
# write all args to some a file...
一个项目中需要迭代计算,时间长,但是在
重定向
输出
的时候所有标准
输出
不能及时
输出
,这就要求
程序
主函数正常运行完后才能正常
输出
到
文件
。
因为标准
输出
到终端时默认行缓冲或无缓冲,
重定向
到硬盘之后,就变成了全缓冲
1. Fully buffered means that I/O takes place only when the buffer is fully,
the process e
Python
小笔记——urllib2得到
重定向
最终链接
强大的urllib2其实是有处理链接
重定向
的功能的,但是如何得到跳转最终的链接呢?其实相当简单,做个小笔记,也防止自己忘记了。
接下来用http://sourceforge.net做实验吧。
例如链接http://sourceforge.net/projects/mysql...
windows命令提示符(cmd.exe)和Linux Shell(bash等)均可通过">"或”>>“将
输出
重定向
。其中, ">"表示覆盖
输出
,”>>“表示追加
输出
。
例如,”2>“可
重定向
标准错误,
重定向
到”null“(Windows)或"/dev/null"(Linux)会抑制
输出
,既不屏显也不存盘。
将
Python
脚本
输出
重定向
到
文件