Tôi đang viết một công cụ nghiên cứu và gần đây tôi đã chuyển từ sử dụng các câu lệnh "in" sang sử dụng chức năng nhật ký được tích hợp vào Python. Điều này, tôi lý luận, sẽ cho phép tôi cung cấp cho người dùng tùy chọn bán kết quả đầu ra cho một tệp, ngoài việc bán nó ra màn hình.Đăng nhập từ Ứng dụng Bên ngoài
Cho đến nay rất tốt. Một phần của mã của tôi là trong Python sử dụng "logger.info" và "logger.error" để đổ vào cả màn hình và một tập tin. "logger" là trình ghi log-module. Phần này hoạt động như một sự quyến rũ.
Tuy nhiên, tại một số điểm, tôi sử dụng "subprocess.call" để chạy tệp thi hành thông qua trình bao. Vì vậy, trong suốt mã, tôi có các dòng như
proc = subprocess.call(command)
Đầu ra từ lệnh này sẽ in ra màn hình, như mọi khi, nhưng nó sẽ không đổ vào tệp mà người dùng đã chỉ định.
Một lựa chọn có thể sẽ mở ra một đường ống đến tập tin:
proc = subprocess.call(command, stdout=f, stderr=subprocess.OUTPUT)
Nhưng đó sẽ chỉ đổ vào file chứ không phải màn hình.
Về cơ bản, câu hỏi của tôi tóm tắt điều này: có cách nào tôi có thể tận dụng trình ghi nhật ký hiện tại của mình, mà không phải tạo một trình xử lý khác cho các tệp cụ thể cho subprocess.call không? (Có lẽ bằng cách chuyển hướng đầu ra cho logger?) Hoặc là điều này không thể, cho các thiết lập hiện tại? Nếu sau này, làm thế nào tôi có thể cải thiện thiết lập?
(Oh, cũng có thể, nó sẽ là tuyệt vời nếu đăng nhập được trong 'thời gian thực', do đó tin nhắn từ thực thi được ghi lại như họ đang nhận được.)
Nhờ sự giúp đỡ! :)
[StreamLogger class] của Lennart Regebro (http://stackoverflow.com/a/4838875/190597) sẽ hoạt động tốt trong hoàn cảnh của bạn. – unutbu
Cảm ơn bạn đã tham khảo! Điều này làm việc tốt cho trường hợp của tôi. –