Python Academy · Pelajaran

Menangkap Output

Baca stdout dan stderr

Pelajaran 2 daripada 413 langkah

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=True bersama text=True memberikan stdout dan stderr dalam bentuk rentetan.
  • Gabungkan aliran dengan stderr=subprocess.STDOUT; senyapkan aliran dengan DEVNULL.
  • Hantar input melalui input=; check_output ialah pintasan.
  • Ralat membawa output yang ditangkap untuk penyahpepijatan.

Seterusnya: membaca pemboleh ubah persekitaran dan modul os.

Percuma untuk bermula

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

  1. Menjalankan Perintah dengan subprocess
  2. Menangkap Output
  3. Persekitaran dan Modul os
  4. shutil untuk Operasi Fail
← Kembali ke Python Academy