Mengubah hala dan Mendua Output ke Fail Log
Anda bercita-cita untuk mencapai kefungsian utiliti 'tee' baris arahan, di mana semua output yang dihasilkan oleh aplikasi Python anda, termasuk output panggilan sistem, diduplikasi kepada log fail.
Ubah hala
Pendekatan awal anda melibatkan penduaan deskriptor fail sys.stdout dan sys.stderr ke fail log, yang berjaya mengubah hala output ke log masuk mod daemon. Walau bagaimanapun, kaedah ini kurang dalam mod interaktif kerana ia menghalang paparan serentak output pada skrin.
Penduaan
Untuk mencapai pendua, hanya membalikkan panggilan dup2 adalah tidak mencukupi. Sebaliknya, anda boleh menggunakan teknik yang memintas sys.stdout dan menduplikasi data bertulis kepada kedua-dua skrin dan fail log.
Penyelesaian
Coretan di bawah menyediakan penyelesaian yang elegan:
class Tee(object): def __init__(self, name, mode): self.file = open(name, mode) self.stdout = sys.stdout sys.stdout = self def __del__(self): sys.stdout = self.stdout self.file.close() def write(self, data): self.file.write(data) self.stdout.write(data) def flush(self): self.file.flush()
Kelas ini merangkumi penduaan deskriptor fail dan menawarkan cara lancar untuk menulis kepada sys.stdout dan fail log. Anda boleh memulakan contoh Tee dan menghantar butiran fail log sebagai argumen. Instance itu kemudiannya menjadi sys.stdout baharu.
Kesimpulan
Dengan menggunakan kaedah ini, anda boleh mencapai kedua-dua pengalihan (dalam mod daemon) dan duplikasi (dalam mod interaktif ) daripada semua output aplikasi, termasuk output panggilan sistem, ke fail log.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menduakan Output Aplikasi Python (Termasuk Panggilan Sistem) kepada Kedua-dua Konsol dan Fail Log?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!