python getopt参数参数自动补全_当参数不在选项后面时,python getopt模块引发错误

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

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')

关于getopt和argparse 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

这将证实你必须自己处理剩余的清单……

但是,至少,您可以切换两个选项的顺序.

有趣的来源here.

标签:python,command-line-arguments,getopt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值