Python, unittest: is there a way to pass command line options to the app


I have a module that imports unittest and has some TestCases. I would like
to accept some command-line options (for example below, the name of a data file),
but when I try to pass the option I get the message option -i not recognized. Is it possible to have unittest + provide options to the app (note: I'm using optparse to handle the options)? Thanks.

$ python -i data_1.txt

option -i not recognized


follow-up: this is an implementation of the suggested solution:

import cfg_master  #has the optparse option-handling code


if __name__ == '__main__':    
    #add you app's options here...
    options_tpl = ('-i', '--in_dir', '-o', '--out_dir')
    del_lst = []
    for i,option in enumerate(sys.argv):
        if option in options_tpl:

    for i in del_lst:
        del sys.argv[i]

Best Solution

Building on Alex's answer, it's actually pretty easy to do using argparse:

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', default='My Input')
    parser.add_argument('filename', default='some_file.txt')
    parser.add_argument('unittest_args', nargs='*')

    args = parser.parse_args()
    # TODO: Go do something with args.input and args.filename

    # Now set the sys.argv to the unittest_args (leaving sys.argv[0] alone)
    sys.argv[1:] = args.unittest_args

I haven't tested all of the flags you can pass into unittest to see if they work or not, but passing test names in does work, e.g.:

python --input=foo data.txt MyTest

Runs MyTest with foo and data.txt.