我有一个接受表单参数的程序filename:field[slice]
,它工作正常。但我也希望支持文件名-
表示标准输入的通用表示法。可悲的是,-:field[slice]
注册为 optparse 的选项(自然),因此不会显示为位置参数。所以我想知道是否有办法解决这个问题,例如告诉 optparse 以开头的选项-:
毕竟应该被视为位置参数。解决方案应保留参数的顺序,因此foo:bar -:cow baz:dog
不应成为foo:bar baz:dog -:cow
.
问问题
202 次
1 回答
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
——但也许这只是我的经验......
于 2012-11-23T17:56:59.893 回答