1

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

4

1 回答 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 回答