0

我有一个 python 脚本来解析来自用户的输入参数。我的代码是这样的

   def get_arg(argv):
    result = {}
    input_file=stag_db=main_tb=stag_table=main_table = "";
    debug="N"

    msg =  '''        Syntax: dt transaction date 
                      -i input_file (E.g. input_file.tar.gz) 
                      -ds staging_database
                      -dm main_database
                      -ts staging_table
                      -tm main_table
                      -db debug (Y/N)'''
    try:
        opts, args = getopt.getopt(argv,"hd:i:ds:dm:db:ts:tm:",["ifile=","ofile="])
        print args
        print opts
    except getopt.GetoptError:
        f_end_process(msg)
    for opt, arg in opts:
        if opt == '-h':
            f_end_process(msg)   
        elif opt == "-i":
           input_file = arg
        elif opt == "-ds":
            stag_db = arg
        elif opt == "-dm":
            main_tb = arg
        elif opt == "-ts":
            stag_table = arg
        elif opt == "-tm":
            main_table = arg
        elif opt == "-db":
            debug = arg
    result = {'input_file':input_file,'stag_db':stag_db,'main_tb':main_tb,'stag_table':stag_table,'main_table':main_table}
    print result
    if '' in result.values():
        exit_status=-1
        f_end_process(msg)
    result['debug']= debug
    return  result

def main():
    global input_arg 
    input_arg = get_arg(sys.argv[1:])
    print "process started at " +strftime("%Y-%m-%d %H:%M:%S")  
    print input_arg 

我正在运行这样的代码

python main.py -i ok.txt -ds ds_val -dm dm_val -ts tas_val -tm tm_val

我想将所有输入参数解析为一个列表。我将所有必需的模块导入到我的脚本中

现在我只能解析 -i 输入。如何解析 -tm、-ts、-dm、-ds 输入?

4

2 回答 2

1

argparse只需几行,您就可以使用 , 进行管理。

import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--input-file', '-i', type=str,
                        help='input file (eg: input_file.tar.gz)')
    parser.add_argument('--staging-db', '-S', type=str,
                        help='staging database name')
    parser.add_argument('--main-db', '-M', type=str,
                        help='main database name')
    parser.add_argument('--staging-table', '-s', type=str,
                        help='staging table name')
    parser.add_argument('--main-table', '-m', type=str,
                        help='main table name')
    parser.add_argument('--debug', '-d', type=bool, default=False,
                        help="activate debug mode (defaults to False)")
    args = parser.parse_args()

解析器帮助由argparse. 您可以通过键入输出它

$ python YOURSCRIPT.py --help
于 2013-09-01T07:09:59.347 回答
1

在一个交互式 Python 实验中,将各种argv数组传递给getopt

>>> getopt.getopt(['-hd','1'],"hd:i:ds:dm:db:ts:tm:")
([('-h', ''), ('-d', '1')], [])

你没有告诉它寻找一个-hd选项,而是一个-h和一个-d带参数的。

通常对于多字母选项,参数解析器希望您使用--. 你的 getopt 应该是

>>> getopt.getopt(['--hd','1'],"i:",["hd=","ds=",...])
([('--hd', '1')], [])

但是,请考虑argparse

于 2013-09-01T16:27:20.520 回答