MacOSX launchd 将-psn...
参数传递给应用程序。我怎么知道argparse
如何解析参数?基本上-psn_([0-9]+)_([0-9]+)
是这样,但如果它只是解析的话我很好-psn(\S*)
。这有可能吗?
问问题
596 次
2 回答
2
我不知道您还需要什么其他参数(我使用 Linux),但是如何(来自交互式 Ipython 会话):
In [3]: parser.add_argument('-p')
Out[3]: _StoreAction(option_strings=['-p'], dest='p', nargs=None, const=None, default=None, type=None, choices=None, help=None, metavar=None)
In [4]: parser.parse_args('-psn_123_455'.split())
Out[4]: Namespace(p='sn_123_455')
然后你可以根据需要进行解析args.p
。
您不能使用parser.add_argument('-psn')
,因为只有单个字母选项可以有连续的参数。('-psn _123_455','-psn=_123_455' 有效,但不是 '-psn_123_455')。
如果标志有其他用途-p
,这将不起作用。
您可以使用自定义type
来解析参数,例如
def psntype(x):
ret = re.match('sn_([0-9]+)_([0-9]+)',x)
if ret is None:
raise ValueError('bad -psn argument')
return ret.groups()
parser=argparse.ArgumentParser()
parser.add_argument('-p',type=psntype)
print parser.parse_args('-psn_123_455'.split())
# Namespace(p=('123', '455'))
parser.parse_args('-psn_12355'.split())
# usage: ipython [-h] [-p P]
# error: argument -p: invalid psntype value: 'sn_12355'
进行解析的主要优点type
是argparse
可以引发信息错误(使用)。但是您自己的 argparse 后代码可能会引发相同的错误(parser.error('bad -psn argument')
.
于 2013-11-04T20:15:33.460 回答
1
查看psn参数的结构,不可能在不干扰可能的“-p”参数的情况下用 argparse 解析它(请参阅@hpaulj 的答案)。所以,我建议使用partial parsing,并从剩余列表中提取它。
于 2013-10-30T11:45:26.817 回答