我写了一个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 +值?
答案 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))