简体   繁体   English

从命令行python获取参数

[英]getting arguments from command line python

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: 一切正常,除了-l标志,所以如果我的命令行命令是这样的:

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

and the print argv prints 和打印argv打印

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. 请注意,“l”字段中没有任何内容被解析。 Wat am i doing wrong? 我在做错了吗? Thanks 谢谢

getopt is a rather old module. getopt是一个相当古老的模块。 If you have Python2.7, use argparse . 如果你有Python2.7,请使用argparse If you have a slightly older version of Python >= 2.3, you can still install argparse : 如果你有一个稍微旧版本的Python> = 2.3,你仍然可以安装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')

It's because in your shortopts parameter: 'o:v:k:l', the "l" needs to be followed by a colon ":" 这是因为在你的shortopts参数:'o:v:k:l'中,“l”后面跟一个冒号“:”

Since it's not, the "2" is being put into the remainder variable. 既然不是,则将“2”放入余数变量中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM