MacOSX launchd将-psn...
参数传递给应用程序。我怎样才能告诉如何解析参数?它基本上是-psn_([0-9]+)_([0-9]+)
,但我很好,如果它只是分析-psn(\S*)
。这可能吗?Python argparse:如何处理MacOSX' -psn`参数
(约进程序列号(PSN)的一些文档资料请参阅here,而且here是我关于如何处理参数做题。)
MacOSX launchd将-psn...
参数传递给应用程序。我怎样才能告诉如何解析参数?它基本上是-psn_([0-9]+)_([0-9]+)
,但我很好,如果它只是分析-psn(\S*)
。这可能吗?Python argparse:如何处理MacOSX' -psn`参数
(约进程序列号(PSN)的一些文档资料请参阅here,而且here是我关于如何处理参数做题。)
望着PSN论点的结构,它不是可以用argparse解析它,而不会干扰可能的“-p”参数(请参阅@ hpaulj的答案)。所以,我建议使用partial parsing,并从剩余列表中提取它。
我不知道你需要什么其他参数(我使用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代码可能会引发相同的错误(parser.error('bad -psn argument')
。
由于它已被弃用,根据文件,一个干净的方式来处理它将忽略它,恕我直言。你需要处理关于PSN ,准确地说? – Sven
@Sven:最小的处理方式是告诉'argparse'忽略它,但我甚至不知道该怎么做(我不确定这是否可能)。步骤是告诉'argparse'获取'-psn_'后面的部分作为此参数的参数。然后,关于如何处理它的问题是[另一个](http://stackoverflow.com/questions/19661637/psn-parameter-by-macosx-launchd-what-can-i-do-it-it) – Albert
现在我明白了 – Sven