Hướng dẫn how to pass arguments to python script - cách truyền đối số cho tập lệnh python

Chạy các tập lệnh Python từ dòng lệnh có thể là một cách tuyệt vời để tự động hóa quy trình công việc của bạn. Để làm điều này, bạn sẽ cần phải học cách chuyển các đối số từ dòng lệnh sang tập lệnh Python. Điều này sẽ cho phép bạn tạo các tập lệnh có thể tái sử dụng có thể được cập nhật hoặc chạy cho các tình huống hoặc dữ liệu mới bằng cách chỉ truyền trong một vài đối số mới. Trong Python, nhận được các đối số từ dòng lệnh đến một tập lệnh là khá dễ dàng.

Trước khi bạn có thể chuyển các đối số đến một tập lệnh, bạn sẽ cần phải hiểu cách chạy tập lệnh Python từ dòng lệnh. Thực hiện theo hướng dẫn này cho một hướng dẫn từng bước.

Trong Python, các đối số được chuyển đến một tập lệnh từ dòng lệnh bằng gói

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
6. Thành viên
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
7 của
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
6 (
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9) sẽ lưu trữ tất cả thông tin trong mục nhập dòng lệnh và có thể được truy cập bên trong tập lệnh Python. Mô -đun Python từ
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
0 cũng có thể được sử dụng để phân tích các đối số được đặt tên.

Hãy cùng đi qua một số ví dụ.

Để bắt đầu, chúng tôi sẽ tạo một tập lệnh in ra toàn bộ câu lệnh Dòng lệnh. Sau đó, chúng ta có thể kiểm tra cách các đối số được thông qua và học cách kết hợp chúng vào mã của chúng ta.

Trong tập lệnh Python, chúng tôi sẽ nhập

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
6, sau đó chỉ in ra toàn bộ giá trị
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9. Kịch bản trông như thế này.

import sys

print('cmd entry:', sys.argv)

Lưu tập lệnh này là

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
3. Bây giờ chúng tôi sẽ gọi tập lệnh này từ dòng lệnh (làm theo hướng dẫn này nếu bạn cần chỉ đường), như sau. Hãy chắc chắn rằng thư mục làm việc của bạn là cùng một thư mục chứa
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
3.

Bạn có thể nhận thấy khi tôi gọi kịch bản mà tôi đã bao gồm ba đối số cách nhau bởi một không gian (Arg1, Arg2 và Arg3). Đây chỉ là để minh họa cách các cửa hàng

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
6 và hiển thị các đối số. Họ không có ý nghĩa gì.

Tại đây, cuộc gọi của tôi đến

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
3 từ dòng lệnh. Dòng mã thứ hai hiển thị đầu ra.

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']

Bạn có thể thấy rằng

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9 đã lưu trữ các đối số dưới dạng chuỗi trong danh sách. Hãy để thử lại điều này với các loại dữ liệu khác nhau (Float, Int và String) để xem chúng được lưu trữ như thế nào.

Ở đây, cuộc gọi và đầu ra của tập lệnh.

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']

Như bạn có thể thấy, phao và số nguyên cũng được lưu trữ dưới dạng chuỗi bởi

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9.

Truy cập các đối số dòng lệnh trong tập lệnh Python

Bây giờ chúng tôi có một số thông tin cơ bản về cách truy cập các đối số dòng lệnh và cách chúng được lưu trữ, chúng tôi có thể bắt đầu phân tích các đối số đó để sử dụng trong tập lệnh của chúng tôi.

Trong ví dụ đơn giản này, chúng tôi sẽ lặp qua từng đối số (ngoại trừ câu nói đầu tiên, đó là tên tập lệnh) và in nó vào bảng điều khiển.

Hãy bắt đầu bằng cách cập nhật tập lệnh Python,

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
3. Chúng tôi sẽ thêm một vòng lặp để lặp lại thông qua ba đối số cuối cùng trong
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9. Đối với mỗi yếu tố, chúng tôi sẽ in ra chỉ mục (hoặc vị trí) và giá trị của nó.

Ở đây, kịch bản mới. Lưu ý rằng chúng tôi lặp lại thông qua một

import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
1 bắt đầu từ 1. Điều này bỏ qua đối số đầu tiên, đó là tên tập lệnh.

import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])

Chạy tập lệnh bằng cách sử dụng tập hợp các đối số cuối cùng. Như thế này.

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3

Bạn sẽ nhận được đầu ra trông như thế này.

argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3

Điều đó cung cấp cho bạn những điều cơ bản về việc chuyển các đối số dòng lệnh cho một kịch bản Python. Từ đây, bạn có thể muốn thực hiện một số kiểm tra logic để đảm bảo các giá trị đầu vào là các loại thích hợp và nằm trong phạm vi chính xác hoặc tập hợp các giá trị.

Cải thiện phân tích đối số dòng lệnh python

Các ví dụ trên cung cấp các ví dụ đơn giản để giúp bạn bắt đầu. Tuy nhiên, nếu bạn đang tìm kiếm một cái gì đó nâng cao hơn cho phép người dùng chỉ định các đối số với các từ khóa và in tin nhắn trợ giúp mà chúng tôi sẽ cần để nâng cao hơn một chút.

Để truy xuất các đối số được đặt tên từ dòng lệnh, chúng tôi sẽ sử dụng mô -đun Python từ

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
0.
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
0 được tích hợp vào Python cơ sở, vì vậy bạn không cần phải cài đặt nó.

Hãy để bắt đầu một tập lệnh mới sử dụng cả

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
6 và
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
0 để phân tích các đối số dòng lệnh. Kịch bản sẽ có khả năng bốn đối số được đặt tên, ‘Trợ giúp,‘ Input, ’người dùng, và’ đầu ra. Từ dòng lệnh, các đối số này có thể được chỉ định với một dấu gạch ngang và chữ cái đầu tiên (
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
6) hoặc dấu gạch ngang kép và tên đối số đầy đủ (
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
7). Đặt tên cho tập lệnh này
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
8.

Kịch bản này sẽ bao gồm hai phần. Phần đầu tiên là hàm (

import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
9) sẽ lấy các đối số (
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
7) làm đầu vào. Phần thứ hai là một câu lệnh IF sẽ nhận ra khi tập lệnh được gọi và chuyển các đối số từ
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
9 đến
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
9.

Trong phần thân của

import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
9, chúng tôi sẽ xác định các biến cho đầu vào, người dùng và đầu ra. Chúng tôi cũng sẽ xác định một biến cho ‘trợ giúp và cung cấp cho nó một giá trị. Biến ‘Trợ giúp sẽ in ra nếu ném lỗi hoặc nếu người dùng chỉ định
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
6 hoặc
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
7.

Bây giờ hãy gọi

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
6 và chuyển nó các đối số từ dòng lệnh, nhưng không phải là tên tập lệnh (như thế này:
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
7). Trong cuộc gọi đến
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
cmd entry: ['myscript.py', '198.3', '9', 'arg3']
0 cũng là nơi chúng tôi chỉ định cả hai tên ngắn và dài. Các phối tử (:) sau
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
9,
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
0 và
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
1 chỉ ra rằng giá trị là cần thiết cho tham số đó. Các dấu hiệu bằng nhau (=) sau
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
2,
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
3 và
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
4 cho thấy giống nhau.

Tôi đã thực hiện cuộc gọi đến

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py 198.3 9 arg3
6 vào câu lệnh
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
6
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
7 để tập lệnh sẽ in tin nhắn trợ giúp và sau đó thoát nếu có bất kỳ vấn đề nào. Ở đây, những gì kịch bản trông giống như cho đến nay.

import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)

Trong phần cuối cùng của tập lệnh, chúng tôi sẽ phân tích các đối số dựa trên tên ngắn hoặc dài của chúng, hoặc từ khóa và in ra các giá trị cuối cùng.

Để bắt đầu, lặp qua tất cả các yếu tố của

argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
8. Điều này sẽ trả về tên đối số (
argument: 1 value: 198.3
argument: 2 value: 9
argument: 3 value: arg3
9) và giá trị (
import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)
0). Sau đó sử dụng câu lệnh
import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)
1,
import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)
2,
import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)
3 để xác định biến nào để gán đối số cho. Sau khi tất cả các đối số đã được xử lý, in ra tên đối số và giá trị của nó.

Kịch bản cuối cùng nên trông tương tự như thế này.

import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)
    
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            print(arg_help)  # print the help message
            sys.exit(2)
        elif opt in ("-i", "--input"):
            arg_input = arg
        elif opt in ("-u", "--user"):
            arg_user = arg
        elif opt in ("-o", "--output"):
            arg_output = arg

    print('input:', arg_input)
    print('user:', arg_user)
    print('output:', arg_output)


if __name__ == "__main__":
    myfunc(sys.argv)

Hãy để sử dụng tập lệnh này theo một vài cách khác nhau để xem điều gì sẽ xảy ra.

Đầu tiên, hãy để nhận được thông báo trợ giúp bằng cả tên ngắn

import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
6 và dài
import sys

for i in range(1, len(sys.argv)):
    print('argument:', i, 'value:', sys.argv[i])
7.

>>> c:\code\python\tutorials\cmd_scripts>python myscript2.py -h
myscript2.py -i  -u  -o 
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
0
myscript2.py -i  -u  -o 

Đúng như dự đoán, cả hai ví dụ đều dẫn đến việc in tin nhắn trợ giúp đến bảng điều khiển.

Tiếp theo, hãy để Lừa xem những gì xảy ra nếu chúng ta chỉ định tên đối số không hợp lệ,

import sys
import getopt


def myfunc(argv):
    arg_input = ""
    arg_output = ""
    arg_user = ""
    arg_help = "{0} -i  -u  -o ".format(argv[0])
    
    try:
        opts, args = getopt.getopt(argv[1:], "hi:u:o:", ["help", "input=", 
        "user=", "output="])
    except:
        print(arg_help)
        sys.exit(2)


if __name__ == "__main__":
    myfunc(sys.argv)
6.

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
2
myscript2.py -i  -u  -o 

Điều này gây ra một lỗi, dẫn đến việc in tin nhắn trợ giúp một lần nữa.

Bây giờ, hãy để vào các đối số chính xác.

>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
4
>>> c:\code\python\tutorials\cmd_scripts>python myscript.py arg1 arg2 arg3
cmd entry: ['myscript.py', 'arg1', 'arg2', 'arg3']
5

Các đối số được gán cho các biến thích hợp.

Bước tiếp theo

Bài viết này cung cấp cho bạn một đoạn mồi về các đối số dòng lệnh chuyển và phân tích cú pháp với Python. Đối với một triển khai chính thức, vẫn còn nhiều công việc bạn sẽ muốn làm. Điều quan trọng là phải kiểm tra các loại và giá trị của các đối số đầu vào để chắc chắn rằng chúng hợp lệ. Bạn cũng sẽ muốn đảm bảo in ra các tin nhắn hữu ích cho người dùng khi xảy ra lỗi hoặc ngoại lệ khác. Nếu bạn chỉ thực hiện việc này để sử dụng cá nhân, những tính năng đó sẽ rất quan trọng. Tôi đã phát hiện ra rằng việc viết các kịch bản Python của tôi để chạy khỏi dòng lệnh đã giúp tôi tự động hóa nhiều nhiệm vụ và phân tích của mình và đã tiết kiệm cho tôi rất nhiều thời gian.

Cho dù bạn đang tìm cách đưa các kỹ năng GIS của bạn lên một tầm cao mới, hoặc chỉ bắt đầu với GIS, chúng tôi có một khóa học cho bạn! Chúng tôi liên tục tạo và quản lý nhiều khóa học hơn để giúp bạn cải thiện các kỹ năng không gian địa lý của bạn.

Tất cả các khóa học của chúng tôi được giảng dạy bởi các chuyên gia trong ngành và bao gồm hướng dẫn video từng bước để bạn không bị lạc trong video và bài đăng trên blog, dữ liệu có thể tải xuống để bạn có thể sao chép mọi thứ mà người hướng dẫn làm và mã bạn có thể sao chép để bạn có thể tránh gõ lặp đi lặp lại