Python - 如何拆分输出?

时间:2013-05-14 17:56:58

标签: python tee

Newb python问题。我一直在阅读tee()以及分割输出的不同方法。但是我找不到将输出分割到终端和日志文件的好例子。我一直在玩一些选项,这是我到目前为止所做的:

def logname():
    env.warn_only = True
    timestamp = time.strftime("%d_%b_%Y")
    return "%s_%s" % (env.host_string, timestamp)

sys.stdout = open('/home/path/to/my/log/directory/%s' % logname(), 'w')

以上内容将使用主机name_datestamp登录到文件,但不会在屏幕上显示任何内容。然后,当我想停止记录时,我做了:

sys.stdout = sys.__stdout__ 

如何使用上面的定义登录我的文件并同时显示到终端?我是否在tee()的正确道路上?

1 个答案:

答案 0 :(得分:0)

喜欢这个吗?

[user@machine ~]$ python
Python 2.7.3 (default, Aug  9 2012, 17:23:57) 
[GCC 4.7.1 20120720 (Red Hat 4.7.1-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> 
>>> class Tee(object):
...     def __init__(self, logfile, stdio = sys.__stdout__):
...         self.logf = open(logfile, 'w')
...         self.stdio = stdio
...     def write(self, data):
...         self.logf.write(data)
...         self.stdio.write(data)
...     def flush(self):
...         self.logf.flush()
...         self.stdio.flush()
...     def __getattr__(self, k):
...         return getattr(self.stdio, k)
...     def __dir__(self):
...         return dir(self.stdio)
... 
>>> sys.stdout = Tee('/tmp/output')
>>> print 'some test output'
some test output
>>> 
[user@machine ~]$ cat /tmp/output 
some test output
[user@machine ~]$