Thường thì tôi cần xuất dữ liệu ra tệp hoặc, nếu tệp không được chỉ định, sang stdout. Tôi sử dụng đoạn mã sau:
if target:
with open(target, 'w') as h:
h.write(content)
else:
sys.stdout.write(content)
Tôi muốn viết lại nó và xử lý thống nhất cả hai mục tiêu.
Trong trường hợp lý tưởng, nó sẽ là:
with open(target, 'w') as h:
h.write(content)
nhưng điều này sẽ không hoạt động tốt vì sys.stdout bị đóng khi rời khỏi withkhối và tôi không muốn điều đó. Tôi không muốn
stdout = open(target, 'w')
...
bởi vì tôi cần phải nhớ khôi phục stdout ban đầu.
Có liên quan:
- Chuyển hướng stdout đến một tệp bằng Python?
- Xử lý ngoại lệ - bài viết thú vị về xử lý ngoại lệ trong Python, so với C ++
Biên tập
Tôi biết rằng tôi có thể bao bọc target, xác định chức năng riêng biệt hoặc sử dụng trình quản lý ngữ cảnh . Tôi tìm kiếm một giải pháp đơn giản, thanh lịch, phù hợp thành ngữ, không yêu cầu nhiều hơn 5 dòng