Python 使用getopt的命令行选项和参数

Python 使用getopt的命令行选项和参数,python,command-line,arguments,getopt,Python,Command Line,Arguments,Getopt,我试图用python编写一段代码,使用getopt模块获取命令行选项和参数。 这是我的密码: import getopt import sys def usage (): print('Usage') def main(): try: opts, args = getopt.getopt(sys.argv[1:], 'xy:') except getopt.GetoptError as err: print(err) u

我试图用python编写一段代码,使用getopt模块获取命令行选项和参数。 这是我的密码:

import getopt
import sys

def usage ():
    print('Usage')

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'xy:')
    except getopt.GetoptError as err:
        print(err)
        usage()
        sys.exit()

    for o,a in opts:
        if o in ("-x", "--xxx"):
            print(a)
        elif o in ("-y", "--yyy"):
            print(a)
        else:
            usage()
            sys.exit()

if __name__ == "__main__":
    main()
问题是我无法读取选项
x
的参数,但我可以读取
y
的参数。我应该怎么做才能解决这个问题?

试试
getopt.getopt(sys.argv[1:,'x:y:')

解析命令行选项和 参数列表。args是论点 要分析的列表,不带前导 引用正在运行的程序。 通常,这意味着sys.argv[1:]。 选项是选项的字符串 脚本想要删除的字母 通过需要的选项识别 后跟冒号(“:”)的参数; i、 例如,与Unix相同的格式 getopt()使用


如果您想阅读参数,那么选项旁边应该有“:”,有几个选项不需要参数,比如“help”和“verbose”,后面不需要“:”

import getopt
import sys

def usage ():
    print('Usage')

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'x:y:h', ['xxx=', 'yyy=', 'help='])
    except getopt.GetoptError as err:
        print(err)
        usage()
        sys.exit()

    for opt,arg in opts:
        if opt in('-h', '--help'):
            usage()
            sys.exit( 2 )
        elif opt in ('-x', '--xxx'):
            print(arg)
        elif opt in ('-y', '--yyy'):
            print(arg)
        else:
            usage()
            sys.exit()

if __name__ == "__main__":
    main()

您应该看看,因为语法更友好。goits的方法值得注意的是,通常用于允许“可选”参数的getopt双冒号::不受支持,并且可能对新来者“显示”起作用,因为默认情况下允许在“--help::”中使用部分匹配项,但除非您正在寻找“--help:”,否则将永远不会得到处理。他们没有提到文档中不支持这一点,这有点让我生气,因为在本例中,perl获得了比python更好的getopt“stock”模块。。。当然,我们有optpasse和argparse(因为缺少冒号/功能而进行的额外学习让我恼火!)