Tham số dòng lệnh trong Python

Python cung cấp getopt Module giúp bạn phân tích cú pháp các tùy chọn và tham số dòng lệnh.

$ python test.py arg1 arg2 arg3

sys Module trong Python cung cấp sự truy cập tới bất kỳ tham số dòng lệnh nào thông qua sys.argv. Phục vụ hai mục đích:

  • sys.argv là danh sách các tham số dòng lệnh.
  • len(sys.argv) là số tham số dòng lệnh.

Ví dụ

import sys


print 'So tham so:', len(sys.argv), 'tham so.'
print 'Danh sach tham so:', str(sys.argv)

Bây giờ chạy script trên như sau:

$ python test.py arg1 arg2 arg3

Kết quả là:

So tham so: 4 tham so.
Danh sach tham so: ['test.py', 'arg1', 'arg2', 'arg3']

Ghi chú: tham số đầu tiên luôn luôn là tên script và nó cũng được đếm trong số tham số.

Parse các tham số dòng lệnh trong Python

Python cung cấp getopt Module giúp bạn phân tích cú pháp các tùy chọn và tham số dòng lệnh. Module này cung cấp hai hàm và một exception để kích hoạt việc phân tích cú pháp các tham số dòng lệnh.

Phương thức getopt.getopt trong Python

Phương thức này phân tích cú pháp danh sách tham số và các tùy chọn tham số dòng lệnh Cú pháp là:

getopt.getopt(args, option, [long_option])

Chi tiết về tham số:

  • args: Đây là danh sách tham số để được phân tích.
  • option: Đây là chuỗi các tùy chọn mà script muốn để nhận ra. Với các tùy chọn mà yêu cầu một tham số thì nên được theo sau bởi một dấu hai chấm (:).
  • long_option: Đây là tham số tùy ý và nếu được xác định, phải là một danh sách các chuỗi là tên các tùy chọn dài, mà được hỗ trợ. Với các tùy chọn dài yêu cầu một tham số thì nên được theo sau bởi một dấu bằng (=). Để chỉ chấp nhận các tùy chọn dài, các tùy chọn nên là một chuỗi trống.
  • Phương thức này trả về trả trị bao gồm hai phần tử: phần tử đầu là một danh sách các cặp (option, value). Phần tử thứ hai là danh sách các tham số chương trình.
  • Cặp option-value được trả về có một dấu gạch nối ngắn ở trước (ví dụ -x) là tùy chọn ngắn, có hai dấu gạch nối là tùy chọn dài (ví dụ --long-option).

getopt.GetoptError trong Python

Đây là một exception và nó được tạo khi thấy một tùy chọn không được nhận ra trong danh sách tham số hoặc khi một tùy chọn cần một tham số mà không cung cấp tham số nào.

Tham số cho exception là một chuỗi chỉ nguyên nhân gây ra lỗi. Các thuộc tính msgopt cung cấp thông điệp lỗi và tùy chọn có liên quan.

Ví dụ

Giả sử bạn muốn truyền hai tên file thông qua dòng lệnh và bạn cũng muốn cung cấp một tùy chọn để kiểm tra sự sử dụng của script. Usage của script là như sau:

usage: test.py -i <inputfile> -o <outputfile>

Đây là script:

import sys, getopt


def main(argv):
   inputfile = ''
   outputfile = ''
   try:
      opts, args = getopt.getopt(argv,"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 'test.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


if __name__ == "__main__":
   main(sys.argv[1:])

Bây giờ chạy script trên như sau:

$ test.py -h
usage: test.py -i <inputfile> -o <outputfile>


$ test.py -i BMP -o
usage: test.py -i <inputfile> -o <outputfile>


$ test.py -i inputfile
Input file is " inputfile
Output file is "

Bình luận