2012-01-31 33 views
5

Tôi muốn sử dụng argparse để phân tích các đối số mà nó biết và sau đó để phần còn lại bị ảnh hưởng. Ví dụ: tôi muốn có thể chạyĐể các đối số bị ảnh hưởng với argparse

performance -o output other_script.py -a opt1 -b opt2 

Tùy chọn nào sử dụng tùy chọn -o và để phần còn lại không bị ảnh hưởng.

Module profiler.py làm một điều tương tự với optparse, nhưng kể từ khi tôi đang sử dụng argparse tôi đang làm:

def parse_arguments(): 
    parser = new_argument_parser('show the performance of the given run script') 
    parser.add_argument('-o', '--output', default='profiled.prof') 

    return parser.parse_known_args() 

def main(): 
    progname = sys.argv[1] 
    ns, other_args = parse_arguments() 
    sys.argv[:] = other_args 

nào cũng dường như để làm việc, nhưng những gì sẽ xảy ra nếu cũng other_script.py cũng có một lá cờ -o?

Có cách nào tốt hơn để giải quyết vấn đề này không?

Trả lời

5

argparse sẽ dừng để phân tích đối số cho đến EOF hoặc --. Nếu bạn muốn có tranh luận mà không beeing phân tích bằng argparse, bạn có thể viết ::

python [PYTHONOPTS] yourfile.py [YOURFILEOPT] -- [ANYTHINGELSE] 
+0

Ah không biết về điều đó! Nếu không có một điểm đánh dấu, thực tế là rất khó để argparse hiểu được những gì đang xảy ra, tôi đoán, đó không phải là vấn đề dễ dàng .. –

+0

Cần làm rõ rằng bạn cần sử dụng phương thức 'parse_known_args()' (ít nhất là trên python3). 6) – krishonadish

12

Bạn cũng có thể thêm một đối số vị trí để phân tích cú pháp của bạn với nargs=argparse.REMAINDER, để nắm bắt kịch bản và các tùy chọn của nó:

# In script 'performance'... 
p = argparse.ArgumentParser() 
p.add_argument("-o") 
p.add_argument("command", nargs=argparse.REMAINDER) 
args = p.parse_args() 
print args 

Chạy tập lệnh tối thiểu trên ...

$ performance -o output other_script.py -a opt1 -b opt2 
Namespace(command=['performance', '-a', 'opt1', '-b', 'opt2'], o='output') 
+1

cũng 'parse_known_args' nên làm điều này. –

+0

Điều này dường như còn nguyên vẹn '--'. Hoàn hảo! – user1338062

Các vấn đề liên quan