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

คำสั่งย่อยและตัวเลือก

สร้าง CLI ที่ซับซ้อน

คำสั่งย่อยและตัวเลือก เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

ทำไมต้องใช้คำสั่งย่อย

เครื่องมืออย่าง git มีคำสั่งย่อย เช่น git add และ git commit โดย argparse รองรับรูปแบบนี้ผ่าน ตัวแยกวิเคราะห์คำสั่งย่อย ซึ่งแต่ละคำสั่งย่อยมีอาร์กิวเมนต์ของตนเอง

import argparse

parser = argparse.ArgumentParser(prog='tool')
sub = parser.add_subparsers(dest='command')
print('subparsers ready')

การเพิ่มตัวแยกวิเคราะห์คำสั่งย่อย

add_subparsers คืนออบเจ็กต์ที่เมธอด add_parser ใช้สร้างคำสั่งย่อยแต่ละรายการ ส่วน dest จะเก็บคำสั่งที่เลือกไว้

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
sub.add_parser('start')
sub.add_parser('stop')
args = parser.parse_args(['start'])
print('command:', args.command)

อาร์กิวเมนต์เฉพาะคำสั่งย่อย

ตัวแยกวิเคราะห์คำสั่งย่อยแต่ละตัวสามารถกำหนดอาร์กิวเมนต์ของตนเองได้ คำสั่งย่อย add ในที่นี้รับชื่อ ส่วน list ไม่รับอาร์กิวเมนต์

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('name')
sub.add_parser('list')
args = parser.parse_args(['add', 'milk'])
print(args.command, args.name)

การเลือกทำงานตามคำสั่ง

หลังจากแยกวิเคราะห์แล้ว ให้ตรวจสอบ args.command เพื่อเรียกใช้ตรรกะที่ถูกต้อง

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='command')
p_add = sub.add_parser('add')
p_add.add_argument('item')
sub.add_parser('clear')

args = parser.parse_args(['add', 'eggs'])
if args.command == 'add':
    print('adding', args.item)
elif args.command == 'clear':
    print('clearing all')

set_defaults สำหรับตัวจัดการ

รูปแบบที่เป็นระเบียบคือการผูกฟังก์ชันเข้ากับตัวแยกวิเคราะห์คำสั่งย่อยแต่ละตัวด้วย set_defaults(func=...) จากนั้นเรียกใช้ args.func(args)

import argparse

def do_hi(args):
    print('hi', args.who)

parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
p = sub.add_parser('hi')
p.add_argument('who')
p.set_defaults(func=do_hi)

args = parser.parse_args(['hi', 'Ana'])
args.func(args)

ตัวเลือกที่ใช้ร่วมกันผ่านตัวแยกวิเคราะห์หลัก

ตัวแยกวิเคราะห์หลักใช้เก็บตัวเลือกที่มีร่วมกันในคำสั่งย่อยหลายคำสั่ง จึงไม่ต้องเขียนซ้ำ ให้ส่ง parents=[base] และ add_help=False

import argparse

base = argparse.ArgumentParser(add_help=False)
base.add_argument('--verbose', action='store_true')

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
sub.add_parser('run', parents=[base])
args = parser.parse_args(['run', '--verbose'])
print(args.cmd, args.verbose)

ค่าเริ่มต้นของแต่ละตัวเลือก

ตัวเลือกของคำสั่งย่อยสามารถมีค่าเริ่มต้นและชนิดข้อมูลของตนเองได้ เช่นเดียวกับอาร์กิวเมนต์ระดับบนสุด

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd')
p = sub.add_parser('scale')
p.add_argument('--factor', type=float, default=1.0)
args = parser.parse_args(['scale'])
print('factor:', args.factor)

การเพิ่มตัวเลือกที่ระบุซ้ำ

action='append' อนุญาตให้ระบุแฟล็กซ้ำได้หลายครั้ง โดยรวบรวมแต่ละค่าไว้ในรายการ

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--tag', action='append', default=[])
args = parser.parse_args(['--tag', 'a', '--tag', 'b'])
print(args.tag)

การนับแฟล็ก

action='count' นับจำนวนครั้งที่แฟล็กปรากฏ ซึ่งเป็นรูปแบบการเพิ่มระดับความละเอียดแบบคลาสสิกด้วย -vvv

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-v', action='count', default=0)
args = parser.parse_args(['-v', '-v', '-v'])
print('verbosity level:', args.v)

เครื่องมือที่มีสองคำสั่ง

การผสานคำสั่งย่อย ตัวจัดการ และตัวเลือกที่ใช้ร่วมกัน จะได้ CLI หลายคำสั่งที่มีโครงสร้างชัดเจน

import argparse

def add(args):
    print('add', args.item, 'qty', args.qty)

def remove(args):
    print('remove', args.item)

parser = argparse.ArgumentParser()
sub = parser.add_subparsers()
pa = sub.add_parser('add')
pa.add_argument('item')
pa.add_argument('--qty', type=int, default=1)
pa.set_defaults(func=add)
pr = sub.add_parser('remove')
pr.add_argument('item')
pr.set_defaults(func=remove)

args = parser.parse_args(['add', 'pen', '--qty', '3'])
args.func(args)

คำสั่งย่อยที่จำเป็น

ตั้งค่า required=True ให้กับตัวแยกวิเคราะห์คำสั่งย่อย เพื่อบังคับให้ผู้ใช้เลือกคำสั่ง มิฉะนั้น argparse จะแสดงข้อผิดพลาด

import argparse

parser = argparse.ArgumentParser()
sub = parser.add_subparsers(dest='cmd', required=True)
sub.add_parser('go')
args = parser.parse_args(['go'])
print('chosen:', args.cmd)

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ทดสอบความเข้าใจเกี่ยวกับคำสั่งย่อยและตัวเลือก

ทบทวน

คุณได้เรียนรู้ คำสั่งย่อยและตัวเลือก:

  • add_subparsers และ add_parser ใช้สร้างเครื่องมือหลายคำสั่ง
  • set_defaults(func=...) ใช้ส่งต่อการทำงานไปยังตัวจัดการ
  • ตัวแยกวิเคราะห์หลักใช้แบ่งปันตัวเลือกทั่วไป
  • การทำงาน append และ count ใช้จัดการแฟล็กที่ระบุซ้ำ

ถัดไป: ไลบรารี Click สำหรับ CLI ที่ใช้ตัวตกแต่ง

คำถามที่พบบ่อย

บทเรียน “คำสั่งย่อยและตัวเลือก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “คำสั่งย่อยและตัวเลือก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “คำสั่งย่อยและตัวเลือก”

สร้าง CLI ที่ซับซ้อน คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “คำสั่งย่อยและตัวเลือก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม

ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. พื้นฐาน argparse
  2. คำสั่งย่อยและตัวเลือก
  3. ไลบรารี Click
  4. ผลลัพธ์เทอร์มินัลแบบสวยงาม
← กลับไปที่ Python Academy