การดักจับผลลัพธ์
อ่าน stdout และ stderr
การดักจับผลลัพธ์ เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
การเก็บ stdout
หากต้องการอ่านสิ่งที่คำสั่งพิมพ์ออกมา ให้ส่ง capture_output=True ข้อความจะปรากฏในแอตทริบิวต์ stdout ของผลลัพธ์
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True)
print(cp.stdout)ไบต์เทียบกับข้อความ
โดยค่าเริ่มต้น ผลลัพธ์จะเป็นไบต์ ให้ส่ง text=True เพื่อรับสตริงที่ถอดรหัสแล้วแทน ซึ่งโดยทั่วไปเป็นรูปแบบที่คุณต้องการ
import subprocess
cp = subprocess.run(['echo', 'hello'], capture_output=True, text=True)
print(repr(cp.stdout))การตัดขึ้นบรรทัดใหม่ท้ายข้อความ
ผลลัพธ์ของคำสั่งมักลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ ใช้ .strip() เพื่อลบออกก่อนนำค่าไปใช้งาน
import subprocess
cp = subprocess.run(['echo', 'value'], capture_output=True, text=True)
clean = cp.stdout.strip()
print('[' + clean + ']')การเก็บ stderr
ข้อผิดพลาดมักถูกส่งไปยัง stderr และเก็บแยกต่างหาก วิธีนี้ทำให้ผลลัพธ์ปกติกับข้อความข้อผิดพลาดแยกจากกันอย่างชัดเจน
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], capture_output=True, text=True)
print('stdout:', repr(cp.stdout))
print('stderr:', cp.stderr.strip())การใช้ผลลัพธ์ในโค้ด
ผลลัพธ์ที่เก็บไว้เป็นเพียงสตริง คุณจึงนำไปแยกวิเคราะห์ได้ เช่น แยกบรรทัด แปลงตัวเลข หรือส่งต่อให้ส่วนอื่นของโปรแกรม
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)เปลี่ยนเส้นทาง stderr ไปยัง stdout
หากต้องการรวมผลลัพธ์ข้อผิดพลาดเข้ากับกระแสข้อมูลปกติ ให้กำหนด stderr=subprocess.STDOUT จากนั้นทั้งสองส่วนจะปรากฏใน stdout
import subprocess
cp = subprocess.run(['ls', '/no/such/dir'], stdout=subprocess.PIPE,
stderr=subprocess.STDOUT, text=True)
print(cp.stdout.strip())การส่งอินพุต
ส่งข้อมูลไปยัง stdin ของคำสั่งด้วยอาร์กิวเมนต์ input ในตัวอย่างนี้ เราจะส่งข้อความผ่านไปยัง cat
import subprocess
cp = subprocess.run(['cat'], input='piped in\n', capture_output=True, text=True)
print(cp.stdout.strip())ทางลัด check_output
subprocess.check_output() เรียกใช้คำสั่งและส่งคืน stdout โดยตรง พร้อมทำให้เกิดข้อผิดพลาดเมื่อล้มเหลว เป็นคำสั่งบรรทัดเดียวที่สะดวกสำหรับการเก็บผลลัพธ์
import subprocess
out = subprocess.check_output(['echo', 'quick'], text=True)
print(out.strip())การทิ้งผลลัพธ์
หากต้องการปิดการแสดงผลของคำสั่ง ให้เปลี่ยนเส้นทางกระแสข้อมูลไปยัง subprocess.DEVNULL
import subprocess
cp = subprocess.run(['echo', 'silent'], stdout=subprocess.DEVNULL)
print('return code only:', cp.returncode)การจัดการข้อผิดพลาดพร้อมผลลัพธ์
เมื่อใช้ check=True แล้ว CalledProcessError ที่เกิดขึ้นยังคงเก็บ output และ stderr ที่บันทึกไว้สำหรับวิเคราะห์สาเหตุ
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())นำทุกอย่างมาประกอบกัน
ตัวช่วยทั่วไปจะเรียกใช้คำสั่ง ตรวจสอบความสำเร็จ และส่งคืนข้อความที่จัดรูปแบบเรียบร้อยแล้ว ตัวช่วยนี้ครอบคลุมรูปแบบการใช้งานทั่วไป
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']))ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการเก็บผลลัพธ์
ทบทวน
คุณได้เรียนรู้วิธีเก็บผลลัพธ์:
capture_output=Trueร่วมกับtext=Trueจะให้stdoutและstderrเป็นสตริง- รวมกระแสข้อมูลด้วย
stderr=subprocess.STDOUTและปิดการแสดงผลด้วยDEVNULL - ส่งอินพุตผ่าน
input=โดยcheck_outputเป็นทางลัด - ข้อผิดพลาดจะเก็บผลลัพธ์ไว้เพื่อการแก้จุดบกพร่อง
ถัดไป: การอ่านตัวแปรสภาพแวดล้อมและโมดูลระบบปฏิบัติการ
คำถามที่พบบ่อย
บทเรียน “การดักจับผลลัพธ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การดักจับผลลัพธ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การดักจับผลลัพธ์”
อ่าน stdout และ stderr คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การดักจับผลลัพธ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียกใช้คำสั่งด้วย subprocess
- การดักจับผลลัพธ์
- สภาพแวดล้อมและโมดูล os
- shutil สำหรับการดำเนินการกับไฟล์