GNU getopt và các công cụ dòng lệnh sử dụng nó, cho phép các tùy chọn và đối số được xen kẽ, được gọi là tùy chọn hoán vị (xem http://www.gnu.org/software/libc/manual/html_node/Using-Getopt.html#Using-Getopt). Perop's Getopt :: Long module cũng hỗ trợ điều này (với qw (: config gnu_getopt)). argparse dường như không hỗ trợ (hoặc thậm chí đề cập đến) các tùy chọn hoán đổi.Lệnh đối số hoán vị argparse của Python có thể như gnu getopt?
Có nhiều câu hỏi SO liên quan đến lệnh arg/opt, nhưng không có câu hỏi nào trả lời câu hỏi này: Có thể argparse được thực hiện để hoán đổi thứ tự đối số như getopt không?
Các trường hợp sử dụng là một dòng lệnh chữ ký nguyên mẫu như GNU loại:
sort [opts] [files]
trong đó 1) lựa chọn và các tập tin là hoán vị, và 2) trong danh sách tập tin có thể chứa số không hay nhiều đối số.
Ví dụ:
import argparse
p = argparse.ArgumentParser();
p.add_argument('files',nargs='*',default=['-']);
p.add_argument('-z',action='store_true')
p.parse_args(['-z','bar','foo']) # ok
p.parse_args(['bar','foo','-z']) # ok
p.parse_args(['bar','-z','foo']) # not okay
usage: ipython [-h] [-z] [files [files ...]]
Tôi đã thử:
- p.parse_known_args - không phàn nàn, nhưng không thực sự hoán vị hai và nó không Balk về lập luận trông giống như các tùy chọn không hợp lệ (ví dụ: - bogus hoặc -b above).
- p.add_argument ('tệp', nargs = argparse.REMAINDER) - tùy chọn -z được đưa vào tệp trừ khi trước vị trí args
- p.add_argument ('files', nargs = '*', action = ' nối thêm ');
Tôi muốn thực hiện điều gì đó gần nguyên mẫu sắp xếp GNU ở trên. Tôi không quan tâm đến cờ có thể được chỉ định cho mỗi tệp (ví dụ: -f tệp1 -f tệp2).