MacOSX launchd 将 -psn...
参数传递给应用程序。我如何告诉 argparse 如何解析参数?它基本上是 -psn_([0-9]+)_([0-9]+)
但如果它只是解析 -psn(\S*)
我很好>。这可能吗?
最佳答案
我不知道您还需要什么其他参数(我使用 Linux),但是这个怎么样(来自交互式 Ipython session ):
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
标志还有其他用途,则此方法将不起作用。
您可以使用自定义类型
来解析参数,例如
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
可以引发信息性错误(使用时)。但是您自己的 post-argparse 代码可能会引发相同的错误 (parser.error('bad -psn argument')
。
关于Python argparse : how to handle MacOSX `-psn` parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19661298/