使用getopt处理命令行选项和参数

4 投票
2 回答
29641 浏览
提问于 2025-04-16 20:44

我正在尝试用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的参数。我该怎么做才能解决这个问题呢?

2 个回答

0

如果你想读取一个参数,那么这个选项旁边应该有一个':'。不过,有一些选项是不用参数的,比如'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()
12

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

http://docs.python.org/library/getopt.html

这个功能用来解析命令行选项和参数列表。args 是要解析的参数列表,不包括运行程序的前缀。通常来说,这意味着你要用 sys.argv[1:],也就是从第二个参数开始的所有参数。options 是一个字符串,里面包含了脚本想要识别的选项字母,如果某个选项需要参数的话,后面会跟一个冒号(':'),这和 Unix 系统中的 getopt() 用法是一样的。

撰写回答