役に立ちましたか?

解決

標準ライブラリの標準ソリューションは、 argparse docsです。 ):

例を次に示します。

from argparse import ArgumentParser

parser = ArgumentParser()
parser.add_argument("-f", "--file", dest="filename",
                    help="write report to FILE", metavar="FILE")
parser.add_argument("-q", "--quiet",
                    action="store_false", dest="verbose", default=True,
                    help="don't print status messages to stdout")

args = parser.parse_args()

argparse は(特に)サポートしています:

  • 複数のオプションを任意の順序で。
  • 短いオプションと長いオプション。
  • デフォルト値。
  • 使用法ヘルプメッセージの生成。

他のヒント

import sys

print("\n".join(sys.argv))

sys.argv コマンドラインでスクリプトに渡されるすべての引数を含むリストです。

基本的に、

import sys
print(sys.argv[1:])

argparse の福音伝道を行ってみると、これらの理由..本質的に:

(リンクからコピー)

  • argparseモジュールは位置を処理できます およびオプションの引数、 optparseはオプションのみを処理できます 引数

  • argparseは約独断的ではありません あなたのコマンドラインインターフェース 次のようになります--fileのようなオプション または/ fileがサポートされています 必須オプション。 Optparseは拒否します これらの機能をサポートします 実用性よりも純度

  • argparseはさらに生成します 情報を含む使用メッセージ。 から決定されるコマンドラインの使用法 あなたの議論、およびヘルプメッセージ 位置とオプションの両方 引数。 optparseモジュール 独自の使用法を記述する必要があります 文字列、および表示する方法はありません 位置引数のヘルプ。

  • argparseは、 可変数を消費する コマンドライン引数、optparse の正確な数が必要です 引数(1、2、3など)が既知である 事前に

  • argparseは、以下のパーサーをサポートします サブコマンドにディスパッチしながら、 optparseには設定が必要です allow_interspersed_args および パーサーを手動でディスパッチします

そして私の個人的なお気に入り:

  • argparseでは、型と add_argument()へのアクションパラメーター simpleで指定される callables、optparseが必要 クラス属性のハッキング 取得する STORE_ACTIONS または CHECK_METHODS 適切な引数チェック

argparse stdlibモジュール(&quot ; impovement" on stdlibの optparse モジュール)。 argparseの紹介の例:

# script.py
import argparse

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument(
        'integers', metavar='int', type=int, choices=range(10),
         nargs='+', help='an integer in the range 0..9')
    parser.add_argument(
        '--sum', dest='accumulate', action='store_const', const=sum,
        default=max, help='sum the integers (default: find the max)')

    args = parser.parse_args()
    print(args.accumulate(args.integers))

使用法:

$ script.py 1 2 3 4
4

$ script.py --sum 1 2 3 4
10

1つの方法は、 sys.argv を使用することです。これにより、スクリプト名が最初の引数として渡され、他のすべてのパラメーターが渡されます。

import sys

for arg in sys.argv:
    print arg

docopt ライブラリは本当に滑らかです。アプリの使用文字列から引数辞書を作成します。

たとえば、docopt readmeから:

"""Naval Fate.

Usage:
  naval_fate.py ship new <name>...
  naval_fate.py ship <name> move <x> <y> [--speed=<kn>]
  naval_fate.py ship shoot <x> <y>
  naval_fate.py mine (set|remove) <x> <y> [--moored | --drifting]
  naval_fate.py (-h | --help)
  naval_fate.py --version

Options:
  -h --help     Show this screen.
  --version     Show version.
  --speed=<kn>  Speed in knots [default: 10].
  --moored      Moored (anchored) mine.
  --drifting    Drifting mine.

"""
from docopt import docopt


if __name__ == '__main__':
    arguments = docopt(__doc__, version='Naval Fate 2.0')
    print(arguments)

高速で柔軟性に欠ける何かが必要な場合

main.py:

import sys

first_name = sys.argv[1]
last_name = sys.argv[2]
print("Hello " + first_name + " " + last_name)

次に、 python main.py James Smith

を実行します

次の出力を生成します:

  

ハロージェームズスミス

#set default args as -h , if no args:
if len(sys.argv) == 1: sys.argv[1:] = ["-h"]

私は自分でoptparseを使用していますが、サイモン・ウィリソンが最近紹介した optfunc ライブラリ。動作:

  

&quot;関数のイントロスペクション   定義(その引数を含む   およびそのデフォルト値)および使用   コマンドラインを構築すること   引数パーサー。&quot;

たとえば、この関数定義:

def geocode(s, api_key='', geocoder='google', list_geocoders=False):

はこの最適化されたヘルプテキストになります:

    Options:
      -h, --help            show this help message and exit
      -l, --list-geocoders
      -a API_KEY, --api-key=API_KEY
      -g GEOCODER, --geocoder=GEOCODER

stdlibのgetoptが好きです。例:

try:
    opts, args = getopt.getopt(sys.argv[1:], 'h', ['help'])
except getopt.GetoptError, err: 
    usage(err)

for opt, arg in opts:
    if opt in ('-h', '--help'): 
        usage()

if len(args) != 1:
    usage("specify thing...")

最近、私はこれに似た何かをラップして、物事を冗長にしません(たとえば、「-h」を暗黙的にする)。

ご覧のとおり、 optparse &quot; optparseモジュールは廃止されましたさらに開発されません。開発は argparse モジュールを使用して続行されます。&quot;

Pocooのクリックはより直感的で、必要な定型文が少なく、少なくともargparseと同じくらい強力です。

これまでに遭遇した唯一の弱点は、ページのヘルプをカスタマイズすることができないことですが、それは通常要件ではなく、 docopt は、そうである場合には明確な選択のようです。

コマンドライン引数の処理をさらに簡単にするために書いた小さなPythonモジュールに興味があるかもしれません(オープンソースで自由に使用できます)-コマンドー

これらの単純な代替手段として、 docopt を参照することをお勧めします。

docoptは、すべてを自分で実装することを要求するのではなく、-help使用法メッセージを解析することで機能する新しいプロジェクトです。使用法メッセージをPOSIX形式で入力するだけです。

さらに別のオプションは argh です。 argparseに基づいて構築され、次のように記述できます。

import argh

# declaring:

def echo(text):
    "Returns given word as is."
    return text

def greet(name, greeting='Hello'):
    "Greets the user with given name. The greeting is customizable."
    return greeting + ', ' + name

# assembling:

parser = argh.ArghParser()
parser.add_commands([echo, greet])

# dispatching:

if __name__ == '__main__':
    parser.dispatch()

ヘルプなどを自動的に生成します。デコレータを使用して、arg-parseingの動作に関する追加のガイダンスを提供できます。

import argparse

parser = argparse.ArgumentParser(description='Process some integers.')
parser.add_argument('integers', metavar='N', type=int, nargs='+',
                   help='an integer for the accumulator')
parser.add_argument('--sum', dest='accumulate', action='store_const',
                   const=sum, default=max,
                   help='sum the integers (default: find the max)')

args = parser.parse_args()
print(args.accumulate(args.integers))

Assuming the Python code above is saved into a file called prog.py
$ python prog.py -h

Ref-link: https://docs.python.org/3.3/library/argparse.html

私の解決策は、 entrypoint2 です。例:

from entrypoint2 import entrypoint
@entrypoint
def add(file, quiet=True): 
    ''' This function writes report.

    :param file: write report to FILE
    :param quiet: don't print status messages to stdout
    '''
    print file,quiet

ヘルプテキスト:

usage: report.py [-h] [-q] [--debug] file

This function writes report.

positional arguments:
  file         write report to FILE

optional arguments:
  -h, --help   show this help message and exit
  -q, --quiet  don't print status messages to stdout
  --debug      set logging level to DEBUG
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top