การเรียกใช้คำสั่งด้วย subprocess
เรียกใช้โปรแกรมภายนอก
การเรียกใช้คำสั่งด้วย subprocess เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
โมดูลสำหรับเรียกใช้กระบวนการคืออะไร
โมดูล subprocess ช่วยให้โปรแกรม Python ของคุณ เรียกใช้คำสั่งภายนอก และโปรแกรมอื่น ๆ ได้ เช่นเดียวกับการพิมพ์คำสั่งเหล่านั้นในเทอร์มินัล
import subprocess
result = subprocess.run(['echo', 'hello'])
print('return code:', result.returncode)พื้นฐานของ subprocess.run
subprocess.run() เป็นจุดเริ่มต้นที่แนะนำ คุณส่งคำสั่งเป็นรายการอาร์กิวเมนต์ โดยใส่ชื่อโปรแกรมก่อน แล้วจึงใส่อาร์กิวเมนต์แต่ละรายการแยกกัน
import subprocess
result = subprocess.run(['echo', 'one', 'two'])
print('done with code', result.returncode)เหตุใดจึงใช้รายการแทนสตริง
การส่งรายการช่วยไม่ให้เชลล์แยกวิเคราะห์คำสั่งของคุณ จึงป้องกันข้อผิดพลาดจากการใส่เครื่องหมายคำพูดและความเสี่ยงจากการแทรกคำสั่งผ่านเชลล์ แต่ละองค์ประกอบคืออาร์กิวเมนต์หนึ่งรายการ
import subprocess
# Safe: each piece is its own argument
subprocess.run(['echo', 'a file with spaces.txt'])อ็อบเจ็กต์ CompletedProcess
run() ส่งคืน CompletedProcess ซึ่งเก็บ args, returncode และผลลัพธ์ (หากมีการเก็บไว้) รหัส 0 หมายถึงสำเร็จ
import subprocess
cp = subprocess.run(['true'])
print('args:', cp.args)
print('returncode:', cp.returncode)การตรวจสอบรหัสการออก
รหัสการออกที่ไม่ใช่ศูนย์มักหมายความว่าคำสั่งล้มเหลว คุณสามารถตรวจสอบรหัสนี้ด้วยตนเองหลังการเรียกใช้
import subprocess
cp = subprocess.run(['ls', '/no/such/path'])
if cp.returncode != 0:
print('command failed with', cp.returncode)ทำให้เกิดข้อผิดพลาดเมื่อไม่สำเร็จด้วย check=True
ส่ง check=True เพื่อให้ run() ทำให้เกิด CalledProcessError โดยอัตโนมัติเมื่อคำสั่งจบการทำงานด้วยรหัสที่ไม่ใช่ศูนย์
import subprocess
try:
subprocess.run(['false'], check=True)
except subprocess.CalledProcessError as e:
print('failed with code', e.returncode)การส่งอาร์กิวเมนต์
อาร์กิวเมนต์เพิ่มเติมของคำสั่งเป็นเพียงรายการอื่น ๆ ในรายการ ในตัวอย่างนี้ เราจะแสดงเนื้อหาไดเรกทอรีในรูปแบบรายละเอียด
import subprocess
subprocess.run(['echo', '-n', 'no newline'])
print()
print('above echo had -n flag')การกำหนดเวลาหมดอายุ
ใช้ timeout เพื่อยกเลิกคำสั่งที่ทำงานนานเกินไป ซึ่งจะทำให้เกิด TimeoutExpired
import subprocess
try:
subprocess.run(['sleep', '5'], timeout=0.1)
except subprocess.TimeoutExpired:
print('command took too long, aborted')ไดเรกทอรีทำงาน
อาร์กิวเมนต์ cwd เรียกใช้คำสั่งในไดเรกทอรีที่ระบุ โดยไม่เปลี่ยนไดเรกทอรีทำงานของโปรแกรมคุณเอง
import subprocess
subprocess.run(['pwd'], cwd='/tmp')ตัวเลือก shell=True
เมื่อใช้ shell=True คุณจะส่งสตริงคำสั่งเดียวให้เชลล์ตีความ ตัวเลือกนี้เปิดให้ใช้ไปป์และรูปแบบไวลด์การ์ดได้ แต่มีความเสี่ยงเมื่อใช้อินพุตที่ไม่น่าเชื่อถือ ควรเลือกรูปแบบรายการ
import subprocess
subprocess.run('echo hello && echo world', shell=True)หลีกเลี่ยง os.system
os.system แบบเดิมส่งคืนเพียงรหัสการออก และไม่มีวิธีส่งอาร์กิวเมนต์หรือเก็บผลลัพธ์อย่างปลอดภัย subprocess.run จึงเข้ามาแทนที่สำหรับโค้ดใหม่ทั้งหมด
import subprocess
# Modern, safe approach
cp = subprocess.run(['echo', 'modern way'])
print('exit code:', cp.returncode)ตรวจสอบความเข้าใจ
ทดสอบความเข้าใจของคุณเกี่ยวกับการเรียกใช้คำสั่ง
ทบทวน
คุณได้เรียนรู้วิธีเรียกใช้คำสั่งด้วย subprocess:
subprocess.run([...])เรียกใช้โปรแกรมภายนอกอย่างปลอดภัย- ส่งคืน
CompletedProcessที่มีreturncode check=Trueทำให้เกิดข้อผิดพลาดเมื่อล้มเหลว ส่วนtimeoutยกเลิกคำสั่งที่ทำงานช้า- ควรเลือกรูปแบบรายการแทน
shell=True
ถัดไป: การเก็บผลลัพธ์ของคำสั่ง
คำถามที่พบบ่อย
บทเรียน “การเรียกใช้คำสั่งด้วย subprocess” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเรียกใช้คำสั่งด้วย subprocess” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเรียกใช้คำสั่งด้วย subprocess”
เรียกใช้โปรแกรมภายนอก คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การเรียกใช้คำสั่งด้วย subprocess” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียกใช้คำสั่งด้วย subprocess
- การดักจับผลลัพธ์
- สภาพแวดล้อมและโมดูล os
- shutil สำหรับการดำเนินการกับไฟล์