Bagaimana untuk Tee Subprocess Output ke Fail dan Terminal Secara serentak dalam Python?

DDD
Lepaskan: 2024-11-03 21:46:31
asal
198 orang telah melayarinya

How to Tee Subprocess Output to Files and Terminal Simultaneously in Python?

Teeing Subprocess Output ke Fail dan Terminal Secara Serentak

Kaedah subprocess.call() Python membolehkan anda melaksanakan arahan luaran. Walau bagaimanapun, secara lalai, output diarahkan ke terminal. Artikel ini menangani persoalan tentang cara menulis output pada kedua-dua fail dan terminal secara serentak.

Jawapannya terletak pada penggunaan fungsi Popen() secara langsung, yang menawarkan kawalan yang lebih besar ke atas proses pelaksanaan. Dengan menentukan stdout=PIPE, anda boleh membaca daripada aliran stdout proses. Untuk mencapai tingkah laku yang diingini, ikuti langkah berikut:

  1. Buat Fungsi Tee: Tentukan fungsi yang membaca daripada fail input dan menulisnya ke berbilang fail output. Fungsi ini berjalan dalam urutan yang berasingan, memastikan proses utama tidak disekat.
  2. Gunakan Fungsi Tee dalam Fungsi Teed_Call: Buat fungsi pembungkus bernama teed_call() yang memanggil Popen() dengan stdout=PAIP dan stderr=PAIP. Ia menggunakan fungsi tee() untuk menulis strim stdout dan stderr pada kedua-dua fail dan terminal.
  3. Laksanakan Perintah dengan Teeing: Panggil teed_call() dengan argumen perintah yang dikehendaki dan nyatakan fail output menggunakan parameter stdout dan stderr.
  4. Tunggu Output Selesai: Selepas melaksanakan arahan, sertai urutan yang dicipta oleh fungsi tee() untuk memastikan semua output ditulis sebelum meneruskan .

Contoh kod yang disediakan dalam jawapan menunjukkan cara menggunakan fungsi teed_call() untuk memasukkan strim stdout dan stderr pelbagai perintah, termasuk cat, echo dan gcc.

Atas ialah kandungan terperinci Bagaimana untuk Tee Subprocess Output ke Fail dan Terminal Secara serentak dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan