2

MacOSX launchd は-psn...パラメータをアプリケーションに渡します。argparseパラメータを解析する方法を教えてください。基本的-psn_([0-9]+)_([0-9]+)にはパースだけならいいんですけどね-psn(\S*)。それはまったく可能ですか?

(プロセス シリアル番号 (PSN) に関するドキュメントについては、こちらを参照してください。パラメーターをどうするかについての質問はこちらです。)

4

2 に答える 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')連続した引数を持つことができるのは 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'

で解析を行うことの主な利点は、有益なエラーを (使用法で) 発生させることができることですtypeargparseただし、独自の post-argparse コードで同じエラーが発生する可能性があります ( parser.error('bad -psn argument').

于 2013-11-04T20:15:33.460 に答える
1

psn引数の構造を見ると、「-p」引数の可能性に干渉せずに argparse で解析することはできません (@hpaulj の回答を参照)。したがって、部分的な解析を使用して、残りのリストから抽出することをお勧めします。

于 2013-10-30T11:45:26.817 に答える