我想使用getopt分析命令行参数。它会成功解析一个参数。当我尝试传递多个参数时,它将采用第一个标志并将其他所有参数保留在参数中。另外,当我无法在参数列表中传递带冒号的参数时,异常不会触发。python getopt没有按预期处理标志
我:
def main(argv):
try:
opts, args = getopt.getopt(argv,"ns:i:",["num_ratios", "sample=", "iteration="])
except getopt.GetoptError:
print ('test.py -s <sampleName -i <iteration>')
sys.exit(2)
print (opts)
print (args)
for opt, arg in opts:
if opt == '-n':
n = arg
elif opt == '-s':
sampleName=arg
elif opt == '-i':
iteration = arg
if __name__ == "__main__":
main(sys.argv[1:])
如果我再执行:
python calculateRatios.py -n 1 -s wibble
我得到
[('-n', '')]
['1', '-s', 'wibble']
这对我说,这是-n拿起作为一个选项,但不将值1与它关联,然后停止。它没有找到更多的标志,因此不分配值。
当我再执行:
python calculateRatios.py -n 1
我的理解是,这一例外应该揭开序幕,因为我已经在getopt.getopt呼叫年代后得到了一个冒号。这不,不是我得到
[('-n', '')]
['1']
在这两个例子中,有一个在选择一个空字符串,我不知道它的来源。这是问题吗?它来自哪里?我猜这是我错过的一些小事。 I
虽然我并不打算成为必需的选项。我一直遵循的示例(如http://www.diveintopython.net/scripts_and_streams/command_line_arguments.html)表明,在不需要的选项后,您不需要冒号。此外,当没有-s选项通过时,这并不解决异常不会触发的问题,任何想法发生了什么? – Ben
您在哪里阅读过'getopt'中需要的选项?带有':'的选项需要一个参数,如果选项缺失参数_and_是命令行中的最后一个参数,则该参数只能失败。如果你想要/可选,我建议你切换到optparser。 –
需要参数的选项肯定是必需的参数吗?或者我读错了吗? – Ben