Tham số dòng lệnh trong Python



Tham số dòng lệnh trong Python 

Python cung cấp một mô-đun getopt giúp bạn phân tích cú pháp các tùy chọn dòng lệnh và các đối số được cấp vào .
$ python test.py arg1 arg2 arg3
 Mô-đun sys Python cung cấp quyền truy cập vào bất kỳ đối số dòng lệnh nào thông qua sys.argv . Nó phục vụ hai mục đích :

  • sys.argv là danh sách các đối số dòng lệnh.
  • len (sys.argv) là số đối số dòng lệnh.
Sys.argv là gì ? :

Sys.argv là danh sách các đối số dòng lệnh được chuyển tới chương trình Python. Argv đại diện cho tất cả các mục đi kèm qua đầu vào của [ input ] dòng lệnh, về cơ bản nó là một mảng giữ các đối số dòng lệnh của chương trình của chúng ta. Và nó đếm bắt đầu bằng 0 chứ không phải 1 . 

Ví dụ sử dụng : 

Ta có đoạn code sau được lưu vào file test.py : 
#!/usr/bin/python
import sys
print ('Number of arguments:', len(sys.argv), 'arguments.')
print ( 'Argument List:', str(sys.argv))
Bây giờ ta thử chạy đoạn code trên với lệnh sau :
$ python3 test.py arg1 arg2 arg3
Kết quả thu được :
Number of arguments: 4 arguments.
Argument List: ['test.py', 'arg1', 'arg2', 'arg3'] 
Trong kết quả thu được . Tham số đầu tiên luôn là tên tệp chương trình và nó cũng được tính trong số tham số thu được .

 Tham số dòng lệnh trong Python 

Để phân tích [ Parse ] các tham số dòng lệnh trong Python , ta có module Getopt , module này giúp ta phân tích cú pháp các tùy chọn và các tham số dòng lệnh . Module này cung cấp hai hàm và một ngoại lệ [ Exception ] để kích hoạt việc phân tích cú pháp các đối số [ 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ác tùy chọn dòng lệnh và danh sách các tham số. Sau đây là cú pháp đơn giản cho phương thức này : 
getopt.getopt(args, options, [long_options])
Chi tiết về các 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).
Phương thức getopt.GetoptError trong Python :

Đây là một ngoại lệ và nó chỉ được đưa ra khi một tùy chọn không được nhận ra trong dãy các tham số truyền vào hoặc khi một tùy chọn cần phải được cung cấp một tham số nhưng lại không được cung cấp một tham số nào .

Ví dụ sử dụng : 

Ta lấy ví dụ , bạn muốn truyền vào hai tệp 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 cách dụng của script :

Cách sử dụng của script ta muốn làm như sau :
usage: test.py -i <inputfile> -o <outputfile>
Và đây là code sử dụng :

#!/usr/bin/python3
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:])
Và kết quả là :
$ 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 " 

OK ! DONE  

[ " Đừng nên dùng những lời tuyệt tình để làm tổn thương đến người mà bạn yêu vào lúc tâm tình tồi tệ nhất. " ]