gpt4 book ai didi

当参数不在选项后面时,python getopt 模块会引发错误

转载 作者:太空狗 更新时间:2023-10-30 02:32:36 25 4
gpt4 key购买 nike

我有一段代码来处理命令行参数。

def parse_cmd_args():
input_path = None
output_name = 'out.flv.txt'
is_detail = False
try:
opts, args = getopt.getopt(sys.argv[1:], "hi:o:d")
except getopt.GetoptError:
print 'Usage:'
print 'parse_flv -i input_path -o [output_name]'
sys.exit()
for op, value in opts:
if op == '-i':
input_path = value
elif op == '-o':
output_name = value
elif op == '-d':
is_detail = True
elif op == '-h':
print 'Usage:'
print 'parse_flv -i input_path [-o output_name]'
sys.exit()
return os.path.abspath(input_path), output_name, is_detail

如果我输入命令没有选项符号“-”,如下所示:

 python parse_flv.py s

它会引发错误。

我的问题:

如何使用 getopt 模块处理没有“-i”之类选项的参数。谢谢

最佳答案

您应该考虑使用 argparse模块代替。 getopt 有点受限...

这个模块更方便(更少的代码和更多信息帮助和错误消息)。在您的情况下,这将类似于:

parser = argparse.ArgumentParser(add_help=True)
parser.add_argument('infile', nargs=1, help='input file name')
parser.add_argument('outfile', nargs='?', help='output file name')

在此示例中,outfile 是可选的,您可以指定默认输出文件名:

parser.add_argument('outfile', nargs='?', help='output file name', default='out.txt')

关于getoptargparse 的更多细节here (相互比较)。


编辑:

这是使用 getopt 可以做的最好的事情(据我所知),即使用 gnu_getopt 切换到 GNU 模式:

import getopt
import sys

output_name = 'out.txt'
input_name = ''

print 'ARGV :', sys.argv[1:]

options, remainder = getopt.gnu_getopt(sys.argv[1:], 'o:', ['input-path',
'output-name=',
])
print 'OPTIONS :', options

for opt, arg in options:
if opt in ('-o', '--output-name'):
output_name = arg
else:
pass

# Get input name by yourself...
input_name = remainder[0]

print 'OUTPUTNAME :', output_name
print 'REMAINING :', remainder
print 'INPUTNAME :', input_name

调用:

python parse_flv.py input -o output

python parse_flv.py -o output input

输出:

ARGV      : ['-o', 'output', 'input']
OPTIONS : [('-o', 'output')]
OUTPUTNAME : output
REMAINING : ['input']
INPUTNAME : input

这将确认您必须自己处理 remaining 列表...

但是,至少,您可以调换这两个选项的顺序。

有趣的来源 here .

关于当参数不在选项后面时,python getopt 模块会引发错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17341473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com