โมดูล sys ของ Python ให้การเข้าถึงอาร์กิวเมนต์บรรทัดคำสั่งผ่าน sys.argv sys.argv คือรายการอาร์กิวเมนต์บรรทัดคำสั่ง และ sys.argv[0] คือโปรแกรม เช่น ชื่อสคริปต์
บันทึกโค้ดต่อไปนี้เป็น args.py
import sys print ('argument list', sys.argv)
ดำเนินการสคริปต์ด้านบนจากบรรทัดคำสั่งดังนี้:
C:\python37>python args.py 11 22 argument list ['args.py', '11', '22']
โมดูล getopt มีฟังก์ชันแยกวิเคราะห์อาร์กิวเมนต์บรรทัดคำสั่งใน sys.argv รองรับแบบแผนเดียวกันกับฟังก์ชัน Unix getopt() (รวมถึงความหมายพิเศษของอาร์กิวเมนต์ในรูปแบบ '-' และ '--')
API ได้รับการออกแบบมาเพื่อให้ผู้ใช้ฟังก์ชัน C getopt() คุ้นเคย
getopt(args, shortopts, longopts=[])
แยกวิเคราะห์ตัวเลือกบรรทัดคำสั่งและรายการพารามิเตอร์ args เป็นรายการอาร์กิวเมนต์ที่ไม่รวม sys.argv[0] ซึ่งเป็นข้อมูลอ้างอิงชั้นนำของโปรแกรมที่ทำงานอยู่ โดยทั่วไป นี่หมายถึง sys.argv[1:] ข้อโต้แย้งของฟังก์ชันนี้มีดังต่อไปนี้ -
ทางลัด: เป็นสตริงของตัวอักษรตัวเลือกที่สคริปต์จะรู้จัก ตัวเลือกที่ต้องใช้อาร์กิวเมนต์จะตามด้วยโคลอน (':'; นั่นคือรูปแบบเดียวกับที่ Unix getopt() ใช้)
ลองออฟต์: หากระบุไว้ จะต้องเป็นรายการสตริงที่มีชื่ออ็อพชันแบบยาวซึ่งควรรองรับ ไม่ควรใส่อักขระ '-' นำหน้าในชื่อตัวเลือก ตัวเลือกยาวที่ต้องมีอาร์กิวเมนต์ควรตามด้วยเครื่องหมายเท่ากับ ('=')
ค่าตอบแทนประกอบด้วยสององค์ประกอบ:แรกคือรายการของคู่ (ตัวเลือก, ค่า); ที่สองคือรายการอาร์กิวเมนต์ของโปรแกรมที่เหลือหลังจากรายการตัวเลือกถูกถอดออก (นี่คือส่วนต่อท้ายของ args) คู่ตัวเลือกและมูลค่าแต่ละคู่ที่ส่งคืนมีตัวเลือกเป็นองค์ประกอบแรก นำหน้าด้วยยัติภังค์สำหรับตัวเลือกสั้น (เช่น '-x') หรือสองขีดกลางสำหรับตัวเลือกแบบยาว (เช่น '--long-option') และ อาร์กิวเมนต์ option เป็นองค์ประกอบที่สองหรือสตริงว่างหากตัวเลือกไม่มีอาร์กิวเมนต์ ตัวเลือกต่างๆ จะปรากฏในรายการในลำดับเดียวกันกับที่พบ ซึ่งทำให้เกิดได้หลายครั้ง ตัวเลือกยาวและสั้นอาจผสมกันได้
GetoptError ปรากฏขึ้นเมื่อพบตัวเลือกที่ไม่รู้จักในรายการอาร์กิวเมนต์ หรือเมื่อไม่มีตัวเลือกที่ต้องการอาร์กิวเมนต์
ตัวอย่าง
import sys, getopt args=sys.argv[1:] inputfile = '' outputfile = '' try: opts, args = getopt.getopt(args,"hi:o:",["ifile=","ofile="]) except getopt.GetoptError: print ('test.py -i <inputfile> -o <outputfile>') sys.exit(2) for opt, arg in opts: if opt == '-h': print ('args.py -i <inputfile> -o <outputfile>') sys.exit() elif opt in ("-i", "--ifile"): inputfile = arg elif opt in ("-o", "--ofile"): outputfile = arg print ('Input file is "', inputfile) print ('Output file is "', outputfile)
ผลลัพธ์
C:\python37>python args.py -h args.py -i <inputfile> -o <outputfile> C:\python37>python args.py -i abc.txt -o xyz.txt Input file is " abc.txt Output file is " xyz.txt C:\python37>python args.py --ifile=abc.txt --ofile=xyz.txt Input file is " abc.txt Output file is " xyz.txt