Bagaimanakah Saya Boleh Menulis Output Subproses ke Kedua-dua Terminal dan Fail Secara serentak dalam Python?

Barbara Streisand
Lepaskan: 2024-11-03 22:58:30
asal
739 orang telah melayarinya

How Can I Write Subprocess Output to Both the Terminal and Files Simultaneously in Python?

Menulis Output Proses ke Terminal dan Fail Serentak dengan subproses Python

Apabila melaksanakan berbilang boleh laku menggunakan subprocess.call(), adalah wajar untuk mempunyai output dipaparkan dalam kedua-dua terminal dan fail yang ditetapkan. Walau bagaimanapun, tingkah laku lalai hanya membenarkan ubah hala output ke sama ada fail atau terminal.

Untuk mengatasi pengehadan ini, pertimbangkan untuk menggunakan Popen secara langsung bersama-sama dengan argumen stdout=PIPE. Ini akan membolehkan anda membaca output daripada atribut stdout objek Popen.

Untuk mencapai gelagat yang diingini, gunakan langkah berikut:

  • Buat tee() fungsi: Fungsi ini menghasilkan benang untuk memajukan input daripada satu fail kepada berbilang fail output.
  • Laksanakan fungsi teed_call(): Fungsi ini meniru subprocess.call() tetapi menerima argumen fail stdout dan stderr tambahan. Ia menggunakan tee() untuk menulis output pada kedua-dua fail dan terminal.

Berikut ialah contoh cara menggunakan fungsi ini:

<code class="python">import sys
from subprocess import Popen, PIPE
from threading import Thread

def tee(infile, *files):
    ...

def teed_call(cmd_args, **kwargs):
    ...

outf, errf = open("out.txt", "wb"), open("err.txt", "wb")
assert not teed_call(["cat", __file__], stdout=None, stderr=errf)
assert not teed_call(["echo", "abc"], stdout=outf, stderr=errf, bufsize=0)
assert teed_call(["gcc", "a b"], close_fds=True, stdout=outf, stderr=errf)</code>
Salin selepas log masuk

Kod ini menulis output dengan berkesan kepada kedua-duanya fail dan terminal secara serentak untuk setiap arahan yang dilaksanakan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis Output Subproses ke Kedua-dua Terminal dan Fail 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!