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