2013-02-22 74 views
6

Tôi muốn sử dụng Python để gửi đầu ra cho cả tệp log.txt và STDOUT trên thiết bị đầu cuối. Dưới đây là những gì tôi có:Python, cách gửi đầu ra cho cả tệp và thiết bị đầu cuối

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 

Chương trình này sẽ gửi đầu ra tới tệp và giá trị xuất chuẩn. Câu hỏi của tôi là: Làm thế nào chức năng ghi vào tập tin được gọi?

Trả lời

3

Từ documentation cho sys.stdout:

stdout và stderr không cần phải được tích hợp trong các đối tượng tập tin: bất kỳ đối tượng được chấp nhận miễn là nó có một phương thức write() mà phải mất một đối số chuỗi .

+0

cảm ơn người đàn ông, tôi hiểu ngay bây giờ – user192082107

2

Cụ thể hơn, in chức năng (bằng Python 2.x nó vẫn là một từ khóa, nhưng nó không quan trọng ở đây) làm điều gì đó như thế này

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

do đó, khi bạn gọi nó là nó sẽ in tin nhắn của bạn trên sys.stdout. Tuy nhiên, nếu bạn ghi đè lên sys.stdout với một đối tượng có chứa một phương thức .write, thì nó sẽ gọi phương thức đó. Đó là sự kỳ diệu của duck-typing.

Các vấn đề liên quan