import argparse ''' sub-commands and sub-sub-commands: example mainScript.py Command Sub-commands Arguments ------------- --------- ----------------- ---------------------------------- mergePDF mergeFiles f1, f2, ... mergeInFolder folderName editPDF deletePages f, sPg, nPg... rotatePages f, sPg, nPg, q... scalePages f, sPg, nPg, s... cropPages f, sPg, nPg, wL, wT, wR, wB... ''' if __name__ == '__main__': #Reference: /gist.github.com/jirihnidek # Create the top-level (main) parser parser = argparse.ArgumentParser(prog='PROG') parser.add_argument('--argX', action='store_true', help='Argument to main parser') # Create the sub-parser to top-level (main) parser sub_parsers = parser.add_subparsers(help='sub-command help') # --------------------------------------------------------------------------- # Create a parser for SUB-command "sub_cmd_1" parser_sub_cmd_1 = sub_parsers.add_parser('sub_cmd_1', help='Sub-command 1') parser_sub_cmd_1.add_argument('--sub1', type=int, help='Argument: sub-cmd 1') # Create a sub-parser for SUB-command sub_cmd_1 sc_1_sub_parsers = parser_sub_cmd_1.add_subparsers(help='Sub-sub-command help') # Create sub-commands to sub_cmd_1 parser_sub_sub_c11 = sc_1_sub_parsers.add_parser('sub_sub_cmd_11', help='ssc 11') parser_sub_sub_c11.add_argument('-a11', action='store_const', const=True) parser_sub_sub_c12 = sc_1_sub_parsers.add_parser('sub_sub_cmd_12', help='ssc 12') parser_sub_sub_c12.add_argument('-a12', action='store_const', const=True) # --------------------------------------------------------------------------- # Create a parser for SUB-command "sub_cmd_2" parser_sub_cmd_2 = sub_parsers.add_parser('sub_cmd_2', help='Sub-command 2') parser_sub_cmd_2.add_argument('--sub2', type=str, help='Argument: sub_cmd_2') # Create a sub-parser for SUB-command sub_cmd_2 sc_2_sub_parsers = parser_sub_cmd_2.add_subparsers(help='Sub-sub-command help') # Create sub-commands to sub_cmd_2 parser_sub_sub_c21 = sc_2_sub_parsers.add_parser('sub_sub_cmd_21', help='ssc 21') parser_sub_sub_c21.add_argument('-a21', action='store_const', const=True) parser_sub_sub_c22 = sc_2_sub_parsers.add_parser('sub_sub_cmd_22', help='ssc 22') parser_sub_sub_c22.add_argument('-a22', action='store_const', const=True) # --------------------------------------------------------------------------- args = parser.parse_args() ''' python3 sub-parser.py -h usage: PROG [-h] [--argX] {sub_cmd_1,sub_cmd_2} ... positional arguments: {sub_cmd_1,sub_cmd_2} sub-command help sub_cmd_1 Sub-command 1 sub_cmd_2 Sub-command 2 optional arguments: -h, --help show this help message and exit --argX Argument to main parser ------------------------------------------------------------------------------- python3 sub-parser.py sub_cmd_1 -h usage: PROG sub_cmd_1 [-h] [--sub1 SUB1] {sub_sub_cmd_11,sub_sub_cmd_12} ... positional arguments: {sub_sub_cmd_11,sub_sub_cmd_12} Sub-sub-command help sub_sub_cmd_11 ssc 11 sub_sub_cmd_12 ssc 12 optional arguments: -h, --help show this help message and exit --sub1 SUB1 Argument: sub-cmd 1 ------------------------------------------------------------------------------ python3 sub-parser.py sub_cmd_1 sub_sub_cmd_11 -h usage: PROG sub_cmd_1 sub_sub_cmd_11 [-h] [-a11] optional arguments: -h, --help show this help message and exit -a11 '''