====== Processing command-line arguments: module ''argparse'' ====== A lot of useful tools for computer users have a form of commands/scripts which are run from command line (''ls'', ''dir'', ''grep'', ...). These tools usually accept command-line arguments which follow the command name (e.g., ''ls -la'') and which affect the behavior of the command. Python contains standard module [[https://docs.python.org/3/library/argparse.html|argparse]] ([[https://docs.python.org/3/howto/argparse.html|tutorial]]) which allows us easilly configure possible parameters of a script and process them. ===== Command-line arguments in digit classification task ===== The script you have to create should behave according to [[..:start#interface_specification|specifications]]. This can be achieved by configuring the ''argparse'' module in the following way: import argparse def setup_arg_parser(): parser = argparse.ArgumentParser(description='Learn and classify image data.') parser.add_argument('train_path', type=str, help='path to the training data directory') parser.add_argument('test_path', type=str, help='path to the testing data directory') mutex_group = parser.add_mutually_exclusive_group(required=True) mutex_group.add_argument('-k', type=int, help='run k-NN classifier (if k is 0 the code may decide about proper K by itself') mutex_group.add_argument("-b", help="run Naive Bayes classifier", action="store_true") parser.add_argument("-o", metavar='filepath', default='classification.dsv', help="path (including the filename) of the output .dsv file with the results") return parser When you use this function in a script as follows: parser = setup_arg_parser() args = parser.parse_args() print(args.train_path) variable ''args'' will contain all the information passed to the script via command-line arguments, such that you can work with them easily. ===== Skeleton of ''classifier.py'' ===== The above code can be found in file {{ :courses:b3b33kui:cviceni:strojove_uceni:classifier.py |}} which can be used as the skeleton of your solution. If you run the downloaded module as python3 classifier.py -k 3 ./train_data ./test_data you should see the following output: Training data directory: ./train_data Testing data directory: ./test_data Output file: classification.dsv Running k-NN classifier with k=3 i.e., * paths to directories with training and testing data passed on the command line, * the name of the output file which was not specified on the command line and ''argparse'' thus filled in the default value, and * the chosen classifier type (k-NN) with a numeric argument. (But you have to implement the classifier yourselves. :-) )