หากคุณได้พัฒนาสคริปต์หรือแอปพลิเคชัน Python ที่ออกแบบมาเพื่อใช้งานในเทอร์มินัลอีมูเลเตอร์หรือแอพ GUI เป็นหลัก การเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งสามารถปรับปรุงความสามารถในการใช้งาน ความสามารถในการอ่านโค้ด โครงสร้างแอปพลิเคชัน และความเป็นมิตรต่อผู้ใช้โดยรวมของแอปพลิเคชันสำหรับผู้ใช้ปลายทาง อาร์กิวเมนต์บรรทัดคำสั่งเหล่านี้เรียกอีกอย่างว่าตัวเลือกหรือสวิตช์และทำงานคล้ายกับอาร์กิวเมนต์ที่คุณมักจะเห็นในสคริปต์ทุบตีและโปรแกรมอื่น ๆ ที่ใช้ C / C++
ในการเพิ่มอาร์กิวเมนต์ให้กับสคริปต์ Python คุณจะต้องใช้โมดูลในตัวที่ชื่อ argparse ตามชื่อที่แนะนำ จะแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งที่ใช้ขณะเรียกใช้สคริปต์หรือแอปพลิเคชัน Python อาร์กิวเมนต์ที่แยกวิเคราะห์เหล่านี้ยังได้รับการตรวจสอบโดยโมดูล argparse เพื่อให้แน่ใจว่าเป็นประเภทที่เหมาะสม เกิดข้อผิดพลาดหากมีค่าที่ไม่ถูกต้องในอาร์กิวเมนต์
การใช้โมดูล argparse สามารถเข้าใจได้ดีที่สุดผ่านตัวอย่าง ด้านล่างนี้คือตัวอย่างโค้ดบางส่วนที่จะช่วยให้คุณเริ่มต้นใช้งานโมดูล argparse
ตัวอย่างที่ 1: สร้างอาร์กิวเมนต์ช่วยเหลือและข้อความ
พิจารณาตัวอย่างโค้ดด้านล่าง:
นำเข้าargparse
พาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
args= พาร์เซอร์.parse_args()
คำสั่งแรกนำเข้าโมดูล argparse ถัดไป อินสแตนซ์ใหม่ของอ็อบเจ็กต์ ArgumentParser จะถูกสร้างขึ้น และคำอธิบายสั้นๆ สำหรับโปรแกรมจะถูกจัดเตรียมเป็นอาร์กิวเมนต์ จำเป็นต้องใช้วัตถุ ArgumentParser เพื่อแปลงค่าอาร์กิวเมนต์บรรทัดคำสั่งเป็นประเภทข้อมูลที่ Python เข้าใจ สิ่งนี้ทำได้โดยเมธอด parse_args ของอ็อบเจ็กต์ ArgumentParser ดังที่แสดงในคำสั่งสุดท้าย
สมมติว่าคุณได้บันทึกตัวอย่างโค้ดที่ระบุไว้ข้างต้นในไฟล์ชื่อ test.py การรันคำสั่งด้านล่างจะทำให้คุณได้รับข้อความช่วยเหลือที่เกี่ยวข้องกับโปรแกรม
$ ./ทดสอบ.พาย-ชม$ ./ทดสอบ.พาย-ช่วย
คุณควรได้ผลลัพธ์ที่คล้ายกับสิ่งนี้:
การใช้งาน: test.py [-h]
โปรแกรมทดสอบ
อาร์กิวเมนต์ตัวเลือก:
-h, --help แสดงข้อความช่วยเหลือนี้และออก
โปรดทราบว่าไม่มีการเพิ่มตรรกะในการจัดการอาร์กิวเมนต์แยกวิเคราะห์และแปลงเป็นวัตถุในตัวอย่างโค้ดที่กล่าวถึงข้างต้น ดังนั้น ข้อความช่วยเหลือสำหรับอาร์กิวเมนต์แต่ละรายการจะไม่แสดงในผลลัพธ์ เมื่อคุณเพิ่มตรรกะในการจัดการค่าของอาร์กิวเมนต์ที่แยกวิเคราะห์แล้วในโปรแกรมของคุณ ข้อความช่วยเหลือจะเริ่มแสดงคำอธิบายสำหรับอาร์กิวเมนต์แต่ละรายการ
ตัวอย่างที่ 2: จัดการอาร์กิวเมนต์สตริง
ในการเพิ่มอาร์กิวเมนต์ที่สคริปต์หลามของคุณยอมรับได้ คุณต้องใช้เมธอด add_argument ดูรหัสต่อไปนี้:
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument('พิมพ์_สตริง', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา')
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
มีการเพิ่มคำสั่งใหม่ที่แสดงการใช้เมธอด add_argument อาร์กิวเมนต์ใดๆ ที่เพิ่มเข้ามาเมื่อเรียกใช้สคริปต์จะถือเป็นวัตถุ print_string โดย ArgumentParser
โปรดทราบว่าตามค่าเริ่มต้น เมธอด add_argument จะถือว่าค่าที่ดึงมาจากอาร์กิวเมนต์เป็นสตริง ดังนั้นคุณจึงไม่ต้องระบุประเภทให้ชัดเจนในกรณีนี้ ค่าเริ่มต้นของไม่มีถูกกำหนดให้กับอาร์กิวเมนต์ที่เพิ่ม เว้นแต่จะถูกแทนที่
ดูข้อความช่วยเหลืออีกครั้ง:
การใช้งาน: test.py [-h] [print_string]โปรแกรมทดสอบ
อาร์กิวเมนต์ตำแหน่ง:
print_string พิมพ์อาร์กิวเมนต์ที่ให้มา
อาร์กิวเมนต์ตัวเลือก:
-h, --help แสดงข้อความช่วยเหลือนี้และออก
บรรทัดใดบรรทัดหนึ่งในเอาต์พุตระบุว่าอาร์กิวเมนต์ตำแหน่ง เนื่องจากไม่มีการกำหนดคีย์เวิร์ดสำหรับอาร์กิวเมนต์ ขณะนี้อาร์กิวเมนต์ถือเป็นอาร์กิวเมนต์ตำแหน่งที่ลำดับและตำแหน่งของอาร์กิวเมนต์ที่ให้มามีผลโดยตรงต่อโปรแกรม อาร์กิวเมนต์ตำแหน่งยังบังคับ เว้นแต่คุณจะเปลี่ยนพฤติกรรมด้วยตนเอง
ในการกำหนดและแยกวิเคราะห์อาร์กิวเมนต์ที่ไม่บังคับ คุณสามารถใช้ – (ขีดคู่) และเปลี่ยนค่าเริ่มต้นของอาร์กิวเมนต์โดยใช้อาร์กิวเมนต์เริ่มต้น
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument('-print_string', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา',ค่าเริ่มต้น=ถึงสุ่ม สตริง.)
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
ตอนนี้เมื่อคุณเรียกใช้สคริปต์ test.py โดยไม่มีอาร์กิวเมนต์ คุณควรได้รับสตริงแบบสุ่ม เป็นเอาต์พุต คุณยังสามารถเลือกใช้คีย์เวิร์ด –print_string เพื่อพิมพ์สตริงใดก็ได้ที่คุณเลือก
$ ./ทดสอบ.พาย--print_string LinuxคำแนะนำกับLinuxHint.comโปรดทราบว่าคุณสามารถสร้างอาร์กิวเมนต์ที่เป็นทางเลือกได้โดยใช้อาร์กิวเมนต์ required=True เพิ่มเติม
สุดท้าย คุณยังสามารถกำหนดเวอร์ชันชวเลขของอาร์กิวเมนต์โดยใช้ - (ขีดเดียว) เพื่อลดการใช้คำฟุ่มเฟือย
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument(-NS, '-print_string', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา',ค่าเริ่มต้น=ถึงสุ่ม สตริง.)
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
การรันคำสั่งต่อไปนี้ควรให้ผลลัพธ์เช่นเดียวกับด้านบน:
$ ./ทดสอบ.พาย-p Linuxคำแนะนำกับตัวอย่างที่ 3: จัดการอาร์กิวเมนต์จำนวนเต็ม
ในการจัดการอาร์กิวเมนต์ที่ต้องการค่าจำนวนเต็ม คุณต้องตั้งค่าคีย์เวิร์ด type เป็น int เพื่ออนุญาตการตรวจสอบและโยนข้อผิดพลาดในกรณีที่ไม่ตรงตามเงื่อนไข
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument('-NS', '-print_string', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา', พิมพ์=int)
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
ลองรันคำสั่งต่อไปนี้:
$ ./ทดสอบ.พาย-p Linuxคำแนะนำกับคุณควรได้รับข้อผิดพลาดเช่นนี้:
การใช้งาน: test.py [-h] [-p PRINT_STRING]test.py: ข้อผิดพลาด: อาร์กิวเมนต์ -p/--print_string: ค่า int ที่ไม่ถูกต้อง: 'LinuxHint.com'
การระบุค่าจำนวนเต็มจะทำให้คุณได้ผลลัพธ์ที่ถูกต้อง:
$ ./ทดสอบ.พาย-NS10001000ตัวอย่างที่ 4: จัดการการสลับจริงและเท็จ
คุณสามารถส่งผ่านอาร์กิวเมนต์โดยไม่มีค่าใดๆ เพื่อถือว่าเป็นแฟล็ก True และ False โดยใช้อาร์กิวเมนต์ action
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument('-NS', '-print_string', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา',การกระทำ='store_true')
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
เรียกใช้คำสั่งด้านล่างเพื่อรับ True อย่างง่ายเป็นผลลัพธ์:
$ ./ทดสอบ.พาย-NSหากคุณรันสคริปต์โดยไม่มีอาร์กิวเมนต์ -p ค่า False จะถูกกำหนดแทน ค่า store_true ของคีย์เวิร์ด action กำหนดค่า True ให้กับตัวแปร print_string เมื่อใดก็ตามที่อาร์กิวเมนต์ -p ถูกระบุอย่างชัดเจน มิฉะนั้น False จะถูกกำหนดให้กับตัวแปร
ตัวอย่างที่ 5: ใช้ค่าอาร์กิวเมนต์เป็น List
หากคุณต้องการรับค่าหลายค่าพร้อมกันและเก็บไว้ในรายการ คุณต้องระบุคีย์เวิร์ด nargs ในรูปแบบต่อไปนี้:
นำเข้าargparseพาร์เซอร์ =argparseArgumentParser(คำอธิบาย='โปรแกรมทดสอบ')
พาร์เซอร์.add_argument('-NS', '-print_string', ช่วย='พิมพ์อาร์กิวเมนต์ที่ให้มา',นาร์ก='*')
args= พาร์เซอร์.parse_args()
พิมพ์(อาร์กิวเมนต์print_string)
รันคำสั่งต่อไปนี้เพื่อทดสอบโค้ดด้านบน:
$ ./ทดสอบ.พาย-p a bคุณควรได้ผลลัพธ์ดังนี้:
['a', 'b']บทสรุป
โมดูล argparse นั้นค่อนข้างครอบคลุมด้วยตัวเลือกมากมายเพื่อปรับแต่งพฤติกรรมของแอปพลิเคชันบรรทัดคำสั่งและแยกวิเคราะห์ค่าที่ผู้ใช้ให้มา ตัวอย่างเหล่านี้สัมผัสเฉพาะการใช้งานพื้นฐานของโมดูล argparse สำหรับแอปพลิเคชันขั้นสูงและซับซ้อน คุณอาจต้องการใช้งานที่แตกต่างกัน เยี่ยมชม เอกสารราชการ สำหรับคำอธิบายแบบเต็มของโมดูล