2011-12-02 37 views
13

Tôi có một chức năng:Python 2.7 argparse

def x(a,b,c)

Làm thế nào tôi có thể thu thập các giá trị biến từ dòng lệnh phù hợp với mô hình này?

python test.py --x_center a --y_center b c (c có, ví dụ, 3, 4 hoặc giá trị hơn)

+1

câu hỏi là gì? –

Trả lời

39

Bạn có thể làm một cái gì đó như thế như thế này:

import argparse 

def x(x_center, y_center, values): 
    print "X center:", x_center 
    print "Y center:", y_center 
    print "Values:", values 

def main(): 
    parser = argparse.ArgumentParser(description="Do something.") 
    parser.add_argument('-x', '--x-center', type=float, required=True) 
    parser.add_argument('-y', '--y-center', type=float, required=True) 
    parser.add_argument('values', type=float, nargs='*') 
    args = parser.parse_args() 

    x(args.x_center, args.y_center, args.values) 

if __name__ == '__main__': 
    main() 

Hãy thử nó ra:

$ python test.py --x-center 1 --y-center 2 3 4 5 
X center: 1.0 
Y center: 2.0 
Values: [3.0, 4.0, 5.0] 

Để sử dụng the argparse module, bạn thường sẽ muốn bắt đầu với một hàm main (và một số bản mẫu được gọi là nó). Trong hàm main, bạn sẽ muốn create an ArgumentParser. Sau đó, bạn sẽ muốn thêm một số đối số.

Để thêm đối số, bạn sử dụng add_argument.

parser.add_argument('-x', '--x-center', type=float, required=True) 

Ở đây, chúng tôi đang thêm tùy chọn, -x, cũng có tùy chọn dài, --x-center. type chúng tôi chuyển đến add_argument yêu cầu số điện thoại phải là float (và lỗi nếu đó không phải là số dư hợp lệ). Chúng tôi cũng yêu cầu argparse rằng nó được yêu cầu; nếu nó không được cung cấp, lỗi.

parser.add_argument('values', type=float, nargs='*') 

Điều này cũng giống như trước, nhưng vì chuỗi chúng tôi chuyển đến nó không bắt đầu bằng dấu gạch ngang, nó giả định nó không phải là một tùy chọn, mà là một đối số không tùy chọn. Một lần nữa, chúng tôi nói với chúng tôi rằng chúng tôi muốn float s. nargs cho phép bạn chỉ định rằng phải mất nhiều hơn một đối số. * chỉ định rằng chúng tôi muốn bất kỳ số lượng đối số nào.

Cuối cùng, chúng tôi phân tích cú pháp dòng lệnh bằng parse_args. Điều này trả về một đối tượng mà chúng tôi sẽ lưu trữ.

Sau đó, bạn có thể truy cập các tùy chọn và đối số trên đối tượng args đó và thực hiện những việc liên quan trong chương trình của mình.

+0

Dòng x (args.x_center, args.y_center, args.values) phải thay đổi thành x (args.x, args.y, args.values) để chạy đúng –

+0

@VasileiosAntoniou: Bạn có chắc chắn về điều đó không ? Mã hoạt động như là dành cho tôi và làm cho thay đổi của bạn phá vỡ nó. – icktoofay

+0

Có, tôi chắc chắn nhưng nó không quan trọng. Ít nhất cả hai chúng tôi đều có một mã chạy! :) –