Python argparse : how to handle MacOSX `-psn` parameter

标签 python macos argparse launchd

MacOSX launchd 将 -psn... 参数传递给应用程序。我如何告诉 argparse 如何解析参数?它基本上是 -psn_([0-9]+)_([0-9]+) 但如果它只是解析 -psn(\S*) 我很好>。这可能吗?

(有关进程序列号 (PSN) 的一些文档,请参阅 here。而 here 是我关于如何处理该参数的问题。)

最佳答案

我不知道您还需要什么其他参数(我使用 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/

相关文章:

python - django中的脏字段

python - 如何使用 bottlenose 创建远程亚马逊购物车

ios - 使用 Corona SDK 构建的公证 Mac OS 应用程序不再有效。验证失败

python - 帮助屏幕中忽略了 argparse 的 "required"?

Python 命令行参数可以为空或来自选择列表

python-2.7 - python : argparse throwing value error when combining positional and optional argument

python - 通过 id 获取结果失败

python - Fortran:稀疏数组或列表

来自 OSX 终端的 MySQL

flutter - Firestore PERMISSION_DENIED