Menangkap Output
Baca stdout dan stderr
Menangkap Output ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 2 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Menangkap stdout
Untuk membaca perkara yang dicetak oleh arahan, hantar capture_output=True. Teks itu muncul dalam atribut stdout hasil.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)Bait berbanding Teks
Secara lalai, output ialah bait. Hantar text=True untuk mendapatkan rentetan yang dinyahkod sebagai ganti, yang biasanya lebih sesuai.
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))Membuang Baris Baharu di Hujung
Output arahan sering berakhir dengan baris baharu. Gunakan .strip() untuk membersihkannya sebelum menggunakan nilai tersebut.
import subprocess
cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')Menangkap stderr
Ralat biasanya dihantar ke stderr dan ditangkap secara berasingan. Ini memastikan output biasa dan mesej ralat kekal berbeza.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())Menggunakan Output dalam Kod
Output yang ditangkap hanyalah rentetan, jadi anda boleh menghuraikannya: pisahkan baris, tukarkan nombor atau salurkannya ke bahagian lain program anda.
import subprocess
cp = subprocess.run(['printf', 'a\nb\nc\n'], capture_output=True, text=True)
lines = cp.stdout.splitlines()
print('line count:', len(lines))
print(lines)Mengalihkan stderr ke stdout
Untuk menggabungkan output ralat ke dalam aliran biasa, tetapkan stderr=subprocess.STDOUT. Kedua-duanya kemudian muncul dalam stdout.
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())Memberikan Input
Hantar data kepada stdin arahan dengan argumen input. Di sini, kami menyalurkan teks ke dalam cat.
import subprocess
cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())Pintasan check_output
subprocess.check_output() menjalankan arahan dan mengembalikan stdoutnya secara terus, serta mencetuskan ralat apabila gagal. Ini ialah satu baris yang mudah untuk menangkap output.
import subprocess
out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())Membuang Output
Untuk menyenyapkan arahan, alihkan alirannya ke subprocess.DEVNULL.
import subprocess
cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)Mengendalikan Ralat Bersama Output
Apabila menggunakan check=True, CalledProcessError yang dicetuskan masih membawa output dan stderr yang ditangkap untuk tujuan diagnosis.
import subprocess
try:
subprocess.run(['ls', '/missing'], capture_output=True, text=True, check=True)
except subprocess.CalledProcessError as e:
print('failed:', e.returncode)
print('stderr:', e.stderr.strip())Menggabungkan Semuanya
Pembantu biasa menjalankan arahan, menyemak kejayaan dan mengembalikan teks yang bersih. Ini membungkus corak lazim tersebut.
import subprocess
def capture(cmd):
cp = subprocess.run(cmd, capture_output=True, text=True, check=True)
return cp.stdout.strip()
print(capture(['echo', 'final result']))Semakan Pantas
Uji pemahaman anda tentang menangkap output.
Ringkasan
Anda telah mempelajari cara menangkap output:
capture_output=Truebersamatext=Truememberikanstdoutdanstderrdalam bentuk rentetan.- Gabungkan aliran dengan
stderr=subprocess.STDOUT; senyapkan aliran denganDEVNULL. - Hantar input melalui
input=;check_outputialah pintasan. - Ralat membawa output yang ditangkap untuk penyahpepijatan.
Seterusnya: membaca pemboleh ubah persekitaran dan modul os.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 76
- Pelajaran
- 320
Soalan Lazim
Adakah pelajaran “Menangkap Output” percuma?
Ya — teks penuh “Menangkap Output” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Menangkap Output”?
Baca stdout dan stderr Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Python Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 2 daripada 4.
Berapa lamakah pelajaran “Menangkap Output” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Menjalankan Perintah dengan subprocess
- Menangkap Output
- Persekitaran dan Modul os
- shutil untuk Operasi Fail