Tôi đang xây dựng một bộ tập lệnh và mô-đun để quản lý cơ sở hạ tầng của mình. Để giữ cho mọi thứ được tổ chức, tôi muốn củng cố càng nhiều nỗ lực càng tốt và giảm thiểu tấm lò hơi cho các tập lệnh mới hơn.Sử dụng argparse của python trong nhiều tập lệnh được hỗ trợ bởi nhiều mô-đun tùy chỉnh
Cụ thể, vấn đề ở đây là hợp nhất mô-đun ArgumentParser.
Một ví dụ cấu trúc là phải có kịch bản và thư viện tổ chức một cái gì đó như thế này:
|-- bin
|-- script1
|-- script2
|-- lib
|-- logger
|-- lib1
|-- lib2
Trong kịch bản này script1
chỉ có thể tận dụng logger
và lib1
, trong khi script2
sẽ tận dụng logger
và lib2
. Trong cả hai trường hợp, tôi muốn logger chấp nhận '-v' và '-d', trong khi script1
cũng có thể chấp nhận thêm args và lib2
các arg khác. Tôi biết điều này có thể dẫn đến va chạm và sẽ quản lý thủ công.
script1
#!/usr/bin/env python
import logger
import lib1
argp = argparse.ArgumentParser("logger", parent=[logger.argp])
script2
#!/usr/bin/env python
import logger
import lib2
logger
#!/usr/bin/env python
import argparse
argp = argparse.ArgumentParser("logger")
argp.add_argument('-v', '--verbose', action="store_true", help="Verbose output")
argp.add_argument('-d', '--debug', action="store_true", help="Debug output. Assumes verbose output.")
Mỗi kịch bản và đồng lib uld có khả năng có các đối số riêng của nó, tuy nhiên tất cả chúng sẽ được hợp nhất thành một arg_parse cuối cùng()
Các nỗ lực của tôi đã dẫn đến việc không kế thừa/mở rộng thiết lập argp. Làm thế nào điều này có thể được thực hiện ở giữa một tập tin thư viện và kịch bản?
Bạn cho biết chức năng của argparse parents = [parser1, parser2] không hoạt động đối với bạn - chức năng này bị hỏng như thế nào? – babbageclunk