Tôi muốn đăng nhập đầu ra std của một đoạn mã Python vào một tập tin, sử dụng 'với' tuyên bố:Logging stdout và stderr để đăng nhập tập tin sử dụng Python 'với' tuyên bố
with log_to_file('log'):
# execute code
là dễ nhất cách để thực hiện việc này để xác định thủ công log_to_file
, ví dụ:
import sys
class log_to_file():
def __init__(self, filename):
self.f = open(filename, 'wb')
def __enter__(self):
self.stdout = sys.stdout
self.stderr = sys.stderr
sys.stdout = self.f
sys.stderr = self.f
def __exit__(self, type, value, traceback):
sys.stdout = self.stdout
sys.stderr = self.stderr
hoặc có lớp tích hợp sẵn có thể làm điều này chưa?
Hãy xem [this] (http://stackoverflow.com/questions/616645/how-do-i-duplicate-sys-stdout-to-a-log-file-in-python) câu hỏi. Nó có vẻ như những gì bạn đang tìm kiếm. Lưu ý một trong các câu trả lời sử dụng mô đun ghi nhật ký hiện có, trong khi các câu trả lời khác sử dụng đa xử lý. – thegrinner
Cách tiếp cận của bạn là tốt đẹp, ngay cả khi bạn bỏ lỡ để đóng tập tin trên '__exit__' :) Tôi thích nó. – tito
Bạn mong đợi loại câu trả lời nào? Tôi sẽ cung cấp cho nó như là một bình luận: Không, không có lớp được xây dựng trong đó làm điều đó. –