具有多个argv

时间:2015-09-15 15:16:15

标签: python command-line-arguments

我写了一个bash脚本,它基本上是命令nsupdate / rndc的包装器。它检查dns服务器的状态,查询它们,然后添加/删除记录,cname,反向等。

问题是......它是一大堆shell命令,无处不在。这不是太漂亮,也不是维持的噩梦。

我遇到了dnsupdate python库(http://www.dnspython.org/),对我来说,我做的一切都做得更好。所以我想重新编写python中的所有内容。

我在python中相当新(我知道语言结构,但从未做过像这样的大型项目)而且我从一开始就用命令行选择杂乱。

我已经阅读了argparse python doc,但不确定它是否可行。在shell中,一个简单的getopt和一个case可以解决这个问题,但python如何处理cmd行选项?

./easy_nsupdate -a record -ip=10.10.10.10 -name=toto
./easy_nsupdate -r record -ip=10.10.10.10 -name=toto
./easy_nsupdate -a cname -name=toto -cname=newtoto
./easy_nsupdate -r cname -cname=newtoto

一些opt值正向或反向,或者可怕的--force结束时绕过所有dns查询检查。

现在这是我对getopt的尝试,但这似乎不是一个非常好的开始:

def main(argv):
    if len(sys.argv) > 4 :
        usage()
        print("Too many arguments")
        sys.exit()
    try:
        opts, args = getopt.getopt(argv, "h:d", ["help", "add_rec", "remove_rec"])
    except getopt.GetoptError:
        usage()
        sys.exit(1)
    for opt, arg in opts:
        if opt in ("-h", "--help"):
            usage()
            sys.exit()
        elif opt == '-d':
            global _debug
            _debug = 1
        elif opt in ("add_rec"):
            operation,record,info = arg1, arg2, arg3
        elif opt in ("remove_rec"):
            operation,record,info = arg1, arg2, arg3
        elif opt in ("add_cname"):
            operation,record,info = arg1, arg2, arg3
        elif opt in ("remove_cname"):
            operation,record,info = arg1, arg2

简单地说:你们如何在命令行处理一长串args +值?

2 个答案:

答案 0 :(得分:2)

The Hitchhiker's Guide to Python中,有一个page专门用于帮助您构建控制台应用程序的库。我建议您使用Click,作者会很好地解释why

答案 1 :(得分:1)

  

简单地说:你们如何在命令行处理一长串args +值?

内置argparse的Python是适合您的模块:

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))