2013-02-22 39 views
6

端末のファイルlog.txtとSTDOUTの両方に出力を送るためにPythonを使用したいと思います。ここに私が持っているものがあります:Python、ファイルと端末の両方に出力を送信する方法

import sys 
class Logger(object): 
    def __init__(self, filename="Default.log"): 
     self.terminal = sys.stdout 
     self.log = open(filename, "a") 

    def write(self, message): 
     self.terminal.write(message) 
     self.log.write(message) 

sys.stdout = Logger("log.txt") 
print "Hello world !"   #This line is saved in log.txt and STDOUT 

このプログラムは、出力をファイルとstdoutに送ります。私の質問は:どのようにファイルへの書き込み機能が呼び出されたのですか? sys.stdoutのためdocumentationから

答えて

3

stdoutとstderrは、内蔵される必要がないファイルオブジェクト:任意のオブジェクトは、それが文字列の引数を取りますwrite()メソッドを持っているとして受け入れられます。そのように、あなたより具体的には、印刷関数は(Pythonの2.xで、それはまだキーワードですが、それはここでは関係ありません)この

import sys 
def print(message): 
    sys.stdout.write(message) 

ような何かをし

+0

ありがとう、私は今それを得る – user192082107

2

sys.stdoutにメッセージを出力します。ただし、sys.stdoutを.writeメソッドを含むオブジェクトで上書きすると、そのメソッドが呼び出されます。 それはduck-typingの魔法です。

関連する問題