使optparse将某些选项视为位置参数

时间:2012-11-23 17:49:57

标签: python optparse

我有一个程序,它接受filename:field[slice]形式的参数,工作正常。但我也希望支持-的文件名意味着标准输入的通用符号。遗憾的是,-:field[slice]注册为optparse(自然)的选项,因此不会显示为位置参数。所以我想知道是否有办法解决这个问题,例如告诉optparse,以-:开头的选项应该被视为位置参数。解决方案应保留参数的顺序,因此foo:bar -:cow baz:dog不应成为foo:bar baz:dog -:cow

1 个答案:

答案 0 :(得分:2)

在我看来,您最好的选择是预处理sys.argv插入您检查的特殊令牌,而不是-

args = [ '<stdin>:'+x[2:] if x.startswith('-:') else x for x in sys.argv[1:] ]
opt_struct = parser.parse_args(args)

在这种情况下,您可以将<stdin>解析为程序中的标准输入,而不是-

如果:及其之后的内容是可选的,变换会变得复杂一点,但无论如何这都是它的要点。

10次中的9次,使用optparse可能无法解决这些问题,使用argparse解决非常棘手/麻烦,通过预处理sys.argv解决这些问题很简单 - 但也许那只是我的经历......