2013-05-14 2 views
1

Newb python вопрос. Я читал на tee() и различные способы разделения результатов. Но я не могу найти хороший пример для разделения вывода на терминал и на файл журнала. Я играл вокруг с некоторыми вариантами, и это то, что я до сих пор:Python - Как разделить выход?

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__ 

Как я могу войти в мой файл с Definiton выше и отображения на терминал в то же время? Я на правильном пути с тройником()?

+4

'tee()' работает для итераций (данные * производители *) не для потоков файлов (данные * потребители *, действительно). Используйте модуль ['logging'] (http://docs.python.org/2/library/logging.html), чтобы обрабатывать ведение журнала и настраивать его для входа в файловую систему и на терминал. –

+1

В «возможном дубликате» есть несколько хороших ответов, на которые указал AaronD, включая ответ, который я только что опубликовал;) – shx2

ответ

0

Нравится?

[[email protected] ~]$ 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 
>>> 
[[email protected] ~]$ cat /tmp/output 
some test output 
[[email protected] ~]$ 
Смежные вопросы