Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

Python Parser สำหรับตัวเลือกบรรทัดคำสั่ง


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

argparse โมดูลมีเครื่องมือสำหรับการเขียนอินเทอร์เฟซบรรทัดคำสั่งที่ใช้งานง่ายมาก จัดการวิธีแยกวิเคราะห์อาร์กิวเมนต์ที่รวบรวมในรายการ sys.argv สร้างความช่วยเหลือและแสดงข้อความแสดงข้อผิดพลาดโดยอัตโนมัติเมื่อให้ตัวเลือกที่ไม่ถูกต้อง

ขั้นตอนแรกในการออกแบบอินเตอร์เฟสบรรทัดคำสั่งคือการตั้งค่าอ็อบเจ็กต์ parser สิ่งนี้ทำโดย ArgumentParser() ฟังก์ชันในโมดูล argparse ฟังก์ชันสามารถกำหนดสตริงอธิบายเป็นพารามิเตอร์คำอธิบายได้

ในการเริ่มต้นสคริปต์ของเราจะดำเนินการจากบรรทัดคำสั่งโดยไม่มีข้อโต้แย้ง ยังคงใช้ parse_args() เมธอดของ parser object ซึ่งไม่ทำอะไรเลยเพราะไม่มีการโต้แย้งใดๆ

นำเข้า argparseparser =argparse.ArgumentParser(description="sample argument parser")args=parser.parse_args()

เมื่อสคริปต์ด้านบนทำงาน

C:\python36>python argparser1.pyC:\python36>python argparser1.py --helpusage:argparser1.py [-h]ตัวอย่างอาร์กิวเมนต์ parseroptional อาร์กิวเมนต์:-h, --help แสดงข้อความช่วยเหลือนี้และออก 

การใช้บรรทัดคำสั่งที่สองให้ –help ตัวเลือกซึ่งสร้างข้อความช่วยเหลือตามที่แสดง พารามิเตอร์ –help มีให้โดยค่าเริ่มต้น

ตอนนี้ให้เรากำหนดอาร์กิวเมนต์ที่จำเป็นสำหรับการเรียกใช้สคริปต์และหากไม่ได้รับสคริปต์ควรเกิดข้อผิดพลาด ที่นี่เรากำหนดอาร์กิวเมนต์ 'ผู้ใช้' โดย add_argument() วิธีการ

นำเข้า argparseparser=argparse.ArgumentParser(description="sample argument parser")parser.add_argument("user")args =parser.parse_args()if args.user=="Admin":print ("สวัสดีผู้ดูแลระบบ") else:print ("สวัสดีแขก")

ความช่วยเหลือของสคริปต์นี้จะแสดงอาร์กิวเมนต์ตำแหน่งหนึ่งตัวในรูปแบบของ 'ผู้ใช้' โปรแกรมจะตรวจสอบค่าว่าเป็น 'Admin' หรือไม่ และพิมพ์ข้อความที่เกี่ยวข้อง

C:\python36>python argparser1.py --helpusage:argparser1.py [-h] users อาร์กิวเมนต์ตัวอย่าง parserpositional อาร์กิวเมนต์:useroptional arguments:-h, --help แสดงข้อความช่วยเหลือนี้และ exitC:\python36>python argparser1 py AdminHello AdminC:\python36>python argparser1.py tempHello Guest

เราสามารถกำหนด ค่าเริ่มต้น ค่าอาร์กิวเมนต์ในวิธี add_argument()

นำเข้า argparseparser=argparse.ArgumentParser(description="sample argument parser")parser.add_argument("user", nargs='?',default="Admin")args=parser.parse_args()if args.user=="ผู้ดูแลระบบ":print ("สวัสดีผู้ดูแลระบบ")else:print ("สวัสดีผู้เยี่ยมชม")

ที่นี่ nargs คือจำนวนอาร์กิวเมนต์บรรทัดคำสั่งที่ควรใช้ '?'. อาร์กิวเมนต์หนึ่งรายการจะถูกใช้จากบรรทัดคำสั่ง ถ้าเป็นไปได้ และสร้างเป็นรายการเดียว หากไม่มีอาร์กิวเมนต์บรรทัดคำสั่ง ค่าจากค่าเริ่มต้นจะถูกสร้าง

C:\python36>python argparser1.pyHello AdminC:\python36>python argparser1.py AdminHello AdminC:\python36>python argparser1.py testHello Guest

โดยค่าเริ่มต้น อาร์กิวเมนต์ทั้งหมดจะถือเป็นสตริง หากต้องการระบุ พิมพ์ . ให้ชัดเจน ของอาร์กิวเมนต์ ให้ใช้พารามิเตอร์ type ในเมธอด add_argument() ประเภทข้อมูล Python ทั้งหมดเป็นค่าประเภทที่ถูกต้อง

นำเข้า argparseparser=argparse.ArgumentParser(description="add numbers")parser.add_argument("first", type=int)parser.add_argument("second", type=int)args =parser.parse_args()x =args.firsty =args.secondz =x+yprint ('การเพิ่มของ {} และ {} ={}'.format(x,y,z))C:\python36>python argparser2.py 2 3 การเพิ่มของ 2 และ 3 =5

ในตัวอย่างข้างต้น อาร์กิวเมนต์เป็นข้อบังคับ หากต้องการเพิ่มอาร์กิวเมนต์ที่ไม่บังคับ ให้นำหน้าชื่อด้วยเครื่องหมายขีดคู่ -- ในกรณีต่อไปนี้ อาร์กิวเมนต์นามสกุลเป็นทางเลือกเนื่องจากนำหน้าด้วยเครื่องหมายขีดสอง (--นามสกุล)

นำเข้า argparseparser =argparse.ArgumentParser()parser.add_argument("name")parser.add_argument("--surname")args =parser.parse_args()print ("ชื่อของฉันคือ ", args.name, end=' ')if args.surname:print (args.surname)

ชื่ออาร์กิวเมนต์หนึ่งตัวอักษรนำหน้าด้วยขีดเดียวทำหน้าที่เป็นตัวเลือกชื่อย่อ

C:\python36>python argparser3.py Malhar ฉันชื่อ MalharC:\python36>python argparser3.py Malhar --surname Lathkar ฉันชื่อ Malhar Lathkarparser.add_argument("-s","--surname")

หากต้องการให้ค่าอาร์กิวเมนต์จากรายการที่กำหนดเท่านั้น อาร์กิวเมนต์จะถูกกำหนดเป็นพารามิเตอร์ตัวเลือก

นำเข้า argparseparser =argparse.ArgumentParser()parser.add_argument("sub", options=['Physics', 'Maths', 'Biology'])args=parser.parse_args()print ("หัวเรื่องของฉันคือ ", args.sub)

โปรดทราบว่าหากค่าของพารามิเตอร์ไม่ได้มาจากรายการ ข้อผิดพลาดของตัวเลือกที่ไม่ถูกต้องจะปรากฏขึ้น

C:\python36>python argparser4.py PhysicsMy subject is PhysicsC:\python36>python argparser4.py Englishusage:argparser4.py [-h] {Physics,Maths,Biology}argparser4.py:ข้อผิดพลาด:อาร์กิวเมนต์ย่อย:ไม่ถูกต้อง ตัวเลือก:'ภาษาอังกฤษ' (เลือกจาก 'ฟิสิกส์', 'คณิตศาสตร์', 'ชีววิทยา')