คำสั่งย่อยและตัวเลือก
สร้าง 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน argparse
- คำสั่งย่อยและตัวเลือก
- ไลบรารี Click
- ผลลัพธ์เทอร์มินัลแบบสวยงาม