MacOSX launchd は-psn...
パラメータをアプリケーションに渡します。argparse
パラメータを解析する方法を教えてください。基本的-psn_([0-9]+)_([0-9]+)
にはパースだけならいいんですけどね-psn(\S*)
。それはまったく可能ですか?
(プロセス シリアル番号 (PSN) に関するドキュメントについては、こちらを参照してください。パラメーターをどうするかについての質問はこちらです。)
他に必要な引数はわかりませんが (私は 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')
連続した引数を持つことができるのは 1 文字のオプションだけなので、使用できません。('-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
ただし、独自の post-argparse コードで同じエラーが発生する可能性があります ( parser.error('bad -psn argument')
.
psn引数の構造を見ると、「-p」引数の可能性に干渉せずに argparse で解析することはできません (@hpaulj の回答を参照)。したがって、部分的な解析を使用して、残りのリストから抽出することをお勧めします。