Python getopt 将选项识别为参数

Python getopt recognizing options as arguments

我正在尝试在 运行 运行 Python 脚本时解析一些选项。

def main(argv):
    try:
        opts, args = getopt.getopt(argv,"a:p:i:r",["algo=", "population=", "iterations=", "random"])
    except getopt.GetoptError:
        printUsage()
        sys.exit(1)
    print(args, opts)
    #Afterwards, I parse the options
    #...

if __name__ == "__main__":
    main(sys.argv[1:])

然而,当我运行这个

python tsp.py cities.txt -p 4

print(args, opts) 产生了这个。

(['cities.txt', '-p', '4'], [])

为什么将选项解析为参数?

getopt 要求所有 - 选项 优先 -p 4 取而代之的是 一个非破折号选项之后。

python tsp.py -p 4 cities.txt 将被正确解析。

您可能想改为使用 argparse library;它更加灵活,可以在任何位置解析可选的命令行开关,因为它还显式处理所需的参数。