0Pricing
Python Academy · บทเรียน

การเรียกใช้คำสั่งด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเรียกใช้คำสั่งด้วย subprocess
  2. การดักจับผลลัพธ์
  3. สภาพแวดล้อมและโมดูล os
  4. shutil สำหรับการดำเนินการกับไฟล์
← กลับไปที่ Python Academy