วิธีเพิ่มอาร์กิวเมนต์บรรทัดคำสั่งในสคริปต์ Python

How Add Command Line Arguments Python Script



หากคุณได้พัฒนาสคริปต์หรือแอปพลิเคชัน 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 สำหรับแอปพลิเคชันขั้นสูงและซับซ้อน คุณอาจต้องการใช้งานที่แตกต่างกัน เยี่ยมชม เอกสารราชการ สำหรับคำอธิบายแบบเต็มของโมดูล