0

What is incorrect in the following source code?

from argparse import ArgumentParser


class MainClass(object):
    __input_files_vector = []
    __output_directory = None
    __split_percentage_at_tail_int = 100
    __is_pdf_output = False
    __is_png_output = False

    # <editor-fold desc="(__parse_args())">
    @classmethod
    def __parse_args(cls):
        # initialize argument parser
        my_parser = ArgumentParser()
        my_parser.add_argument("-i", help="multiple input files", type=list)
        my_parser.add_argument("-o", help="output directory", type=str)
        my_parser.add_argument("-n", help="percentage of data to split from tail", type=float)
        my_parser.add_argument("--pdf", help="PDF output", action='store_true')
        my_parser.add_argument("--png", help="PNG output", action='store_true')

        # parse the argument
        args = my_parser.parse_args()

        cls.__input_files_vector = args.i
        cls.__output_directory = args.o
        cls.__split_percentage_at_tail_int = args.n
        cls.__is_pdf_output = args.pdf
        cls.__is_png_output = args.png
    # </editor-fold>

    @classmethod
    def main(cls):
        cls.__parse_args()

        print(cls.__input_files_vector)
        print(cls.__output_directory)
        print(cls.__split_percentage_at_tail_int)
        print(cls.__is_pdf_output)
        print(cls.__is_png_output)


if __name__ == "__main__":
    MainClass.main()

OUTPUT:

(by_nn) C:\Users\pc\source\repos\by_nn\SCRIPTS>plot.bat

(by_nn) C:\Users\pc\source\repos\by_nn\SCRIPTS>python arg_parse_test.py -i .\..\OUTPUTS\progress-32.txt .\..\OUTPUTS\progress-64.t
xt .\..\OUTPUTS\progress-128.txt -o .\..\OUTPUTS\ -n 100 --png --pdf
usage: arg_parse_test.py [-h] [-i I] [-o O] [-n N] [--pdf] [--png]
arg_parse_test.py: error: unrecognized arguments: .\..\OUTPUTS\progress-64.txt .\..\OUTPUTS\progress-128.txt

(by_nn) C:\Users\pc\source\repos\by_nn\SCRIPTS>
user366312
  • 16,949
  • 65
  • 235
  • 452
  • On the command line, put `-i` before *each* input filename, not just the first one. – BoarGules Aug 05 '21 at 06:37
  • With your setup, '-i foobar' will pass the string 'foobar' to the function `list`, converting it to `['f', 'o', 'o', 'b', 'a', 'r']`. The `type` parameter does not tell it to accept a list of strings. `nargs` is used for that. – hpaulj Aug 05 '21 at 07:32

0 Answers0