Tôi đã tự hỏi liệu có thể có đối số vị trí theo một đối số với tham số tùy chọn hay không. Lý tưởng nhất là đối số cuối cùng được nhập vào dòng lệnh sẽ luôn áp dụng cho 'testname'.đối số tùy chọn argparse trước đối số vị trí
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs='+')
args = parser.parse_args()
Tôi muốn cả hai cuộc gọi này đều có thể áp dụng cho testname, nhưng lần thứ hai dẫn đến lỗi.
>> python TAF.py -r 1.0 smoketest
>> python TAF.py -r smoketest
TAF.py: error: too few arguments
Tôi nhận thấy rằng việc chuyển đối số vị trí sang mặt trước sẽ dẫn đến hành vi đúng của thông số tùy chọn, tuy nhiên đây không phải là định dạng tôi đang tìm kiếm. Cờ lựa chọn trông giống như một sự thay thế hấp dẫn, tuy nhiên nó ném một lỗi thay vì bỏ qua mục chưa từng có.
CHỈNH SỬA: Tôi đã tìm ra cách hacky xung quanh vấn đề này. Nếu bất cứ ai có một giải pháp đẹp hơn, tôi sẽ đánh giá cao nó.
import argparse
parser = argparse.ArgumentParser(description='TAF')
parser.add_argument('-r','--release',nargs='?',dest='release',default='trunk')
parser.add_argument('testname',nargs=argparse.REMAINDER)
args = parser.parse_args()
if not args.testname:
args.testname = args.release
args.release = ''
Cảm ơn bạn đã trả lời. Tôi đồng ý rằng nó có thể được thực hiện một cách rõ ràng thông qua việc thêm tiền tố cho đối số testname, hoặc như tôi đã đề cập chỉ liệt kê chúng trước đối số khác. –