getting arguments from command line python
Question: I am trying to get three arguments from command line:

    
    
    -o (for outputfile) -k (number of clusters) -l (data to be clustered)
    

So i wrote this.

    
    
    def get_input():
    print 'ARGV      :', sys.argv[1:]
    
    options, remainder = getopt.getopt(sys.argv[1:], 'o:v:k:l', ['output=', 
                                                         'verbose',
                                                         'k_clust=',
                                                         'limit='])
    print "options ",options
    file_flag , k_flag, count_flag = False, False,False
    for opt, arg in options:
        print opt
        if opt in ('-o', '--output'):
            print "here ", opt, arg
            output_filename = arg
            o_flag = True
    
        if opt in ('-v', '--verbose'):
            verbose = True
        if opt == '--version':
            version = arg
    
        if opt in ('-k','--k_clust'):
            print "here", opt, arg
            k_clust = arg
            k_flag = True
    
        if opt in ('-l','--limit'):
             kcount = arg
             assert kcount!=0 and kcount!= ''
             print "limit ", arg
             count_flag = True
    if k_flag == False:
        sys.exit(" no cluster specified, will be exiting now")
    if o_flag == False:
        print "using default outfile name ",output_filename
    if count_flag == False:
       kcount = 10000000
    
    
    return output_filename, k_clust,kcount
    

Everything is working on fine except the -l flag so if my command line command
is this:

    
    
    $python foo.py -o foo.txt -k 2 -l 2
    

and the print argv prints

    
    
    ARGV      : ['-o', 'demo.txt', '-k', '2', '-l', '2']
    

but the options is:

    
    
    options  [('-o', 'demo.txt'), ('-k', '2'), ('-l', '')]
    

Notice that nothing is being parsed in the "l" field. Wat am i doing wrong?
Thanks


Answer: `getopt` is a rather old module. If you have Python2.7, use
[argparse](http://docs.python.org/library/argparse.html#module-argparse). If
you have a slightly older version of Python >= 2.3, you can still [install
argparse](http://pypi.python.org/pypi/argparse):

With

    
    
    import argparse
    parser=argparse.ArgumentParser()
    parser.add_argument('-o', help = 'outputfile')
    parser.add_argument('-k', help = 'number of clusters')
    parser.add_argument('-l', help = 'data to be clustered')
    args=parser.parse_args()
    print(args)
    

running

    
    
    test.py -o foo.txt -k 2 -l 2
    

yields

    
    
    Namespace(k='2', l='2', o='foo.txt')
    

