質問

最も簡単, tersest, も 柔軟な 方法は図書館のための構文解析Pythonコマンドライン引数?

役に立ちましたか?

解決

この答えを示唆 optparse 主体的に適応していくためには歳以上のPythonのバージョンPython2.7以上 argparse 置き換え optparse.見 この答え ます。

他の人を指摘できようoptparseは以getopt.getoptのですが、ここでは、一対一のマッピング標準のgetopt(3)Cライブラリの機能、非常に使いやすいです。

optparseはがしている姿を見せるわけですからデフォルト値が設定されているより、構造が簡単で延長す。

ここでの典型的なラインを追加するオプションをパーサー:

parser.add_option('-q', '--query',
            action="store", dest="query",
            help="query string", default="spam")

でんが、何よりもそれを物語って;での処理時間も受け付け-qまたは--クエリートフォリオ-リバランス店舗数の引数属性というクエリがデフォルト値がない場合に指定します。でも共にする宣言の引数を使用した場合の走-h/--help)にあり、オプションです。

通常解析し引数:

options, args = parser.parse_args()

これは、デフォルトを解析し、標準の引数に渡されるスクリプト(sys.argv[1:])

オプションクエリを設定値に渡されます。

自分の好きな名前を付けてパーサーだけで行うこと

parser = optparse.OptionParser()

これらはすべての基本にあります。こちらは完全にPythonスクリプトを示すこ

import optparse

parser = optparse.OptionParser()

parser.add_option('-q', '--query',
    action="store", dest="query",
    help="query string", default="spam")

options, args = parser.parse_args()

print 'Query string:', options.query

5ラインのpythonのでもあります。

保存してくださいsample.pyやっと

python sample.py

やまと

python sample.py --query myquery

そのディレクティブoptparseはとても簡単です。一つのプロジェクトでは、わたしたコマンドでクラスのできる巣のサブコマンドコマンドツリーます。この指摘をお寄せくのチェーンのコマンドです。とは言わないでき簡単に説明し、数行が、お気軽に 閲覧中の私のリポジトリ メインクラスなど クラスについて研究を行っているし、オプションパーサ

他のヒント

その他の回答になりきろう argparse るための新しいPythonがいませんの使用例です。のための完全性、ここでは概要使用方法argparse:

1)初期化

import argparse

# Instantiate the parser
parser = argparse.ArgumentParser(description='Optional app description')

2)追加引数

# Required positional argument
parser.add_argument('pos_arg', type=int,
                    help='A required integer positional argument')

# Optional positional argument
parser.add_argument('opt_pos_arg', type=int, nargs='?',
                    help='An optional integer positional argument')

# Optional argument
parser.add_argument('--opt_arg', type=int,
                    help='An optional integer argument')

# Switch
parser.add_argument('--switch', action='store_true',
                    help='A boolean switch')

3)構文解析

args = parser.parse_args()

4)アクセス

print("Argument values:")
print(args.pos_arg)
print(args.opt_pos_arg)
print(args.opt_arg)
print(args.switch)

5)チェック値

if args.pos_arg > 10:
    parser.error("pos_arg cannot be larger than 10")

用途

正しい利用方法:

$ ./app 1 2 --opt_arg 3 --switch

Argument values:
1
2
3
True

誤った引数:

$ ./app foo 2 --opt_arg 3 --switch
usage: convert [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]
app: error: argument pos_arg: invalid int value: 'foo'

$ ./app 11 2 --opt_arg 3
Argument values:
11
2
3
False
usage: app [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]
convert: error: pos_arg cannot be larger than 10

ヘルプ:

$ ./app -h

usage: app [-h] [--opt_arg OPT_ARG] [--switch] pos_arg [opt_pos_arg]

Optional app description

positional arguments:
  pos_arg            A required integer positional argument
  opt_pos_arg        An optional integer positional argument

optional arguments:
  -h, --help         show this help message and exit
  --opt_arg OPT_ARG  An optional integer argument
  --switch           A boolean switch

使用docopt

2012年からPythonには非常に簡単で強力なっ 涼しい モジュールのための引数の構文解析と呼ばれ docopt.でPython2.6 3.5が必要なくなりインストール(だけコピーします。ここでは一例ですからこのドキュメンテーション

"""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)

こ:2行のコードをごdoc文字列 必須およびお客様の引数を解釈可能な引数オブジェクトです。させていただいたときで涼しくない;-)

Pythonを使用した火災

から2017年 python-火災 も涼しいモジュールについてのCLIインターフェースコードやっています ゼロ 引数の解析.この一例からのドキュメント(この小さなプログラム公開機能 double のコマンドライン):

import fire

class Calculator(object):

  def double(self, number):
    return 2 * number

if __name__ == '__main__':
  fire.Fire(Calculator)

コマンドラインから実行可能です:

> calculator.py double 10
20
> calculator.py double --number=15
30

カアではなかったのでしょうか。

の股関節のではあ argparse のための これらの ます。argparse>optparse>getopt

更新: としてのpy2.7 argparse 一部の標準ライブラリと optparseは で推奨されていません。

ります。 クリック.で講演概要集管理オプションできる"(...)に作成できるコマンドラインインタフェースをcomposableうに活用し、"いかに少ないコードは必要に応じて".

この使用例:

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Simple program that greets NAME for a total of COUNT times."""
    for x in range(count):
        click.echo('Hello %s!' % name)

if __name__ == '__main__':
    hello()

でも自動的に生成しく形式のヘルページ:

$ python hello.py --help
Usage: hello.py [OPTIONS]

  Simple program that greets NAME for a total of COUNT times.

Options:
  --count INTEGER  Number of greetings.
  --name TEXT      The person to greet.
  --help           Show this message and exit.

かを使用 getopt

この例のコードのメンバー

import getopt, sys

def main():
    try:
        opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
    except getopt.GetoptError:
        # print help information and exit:
        usage()
        sys.exit(2)
    output = None
    verbose = False
    for o, a in opts:
        if o == "-v":
            verbose = True
        if o in ("-h", "--help"):
            usage()
            sys.exit()
        if o in ("-o", "--output"):
            output = a

そういった言葉が、こちらでいただけます。

また、二種類のオプションを受けている方の引数、および のようにスイッチ。

sys.argv はんだ char** argv C.Cスキップす最初の要素の名前のプログラムおよび解析の引数: sys.argv[1:]

Getopt.getopt 解析すのでルール定義できる引数です。

"ho:v" についての引数: -ONELETTER.の : その -o 受け入れを一つの引数。

最後に ["help", "output="] 記述長の引数( --MORETHANONELETTER ).の = 出力後は再びその出力を受け付け一引数になります。

その結果、リストのカップル(オプション引数)

場合にはオプションいず引数(のような --help こちら) arg 部分は空文字列となります。また普段のループはこのリストに名前のオプションとしての例です。

いたします。

使用 optparse 付属の標準図書館があります。例えば:

#!/usr/bin/env python
import optparse

def main():
  p = optparse.OptionParser()
  p.add_option('--person', '-p', default="world")
  options, arguments = p.parse_args()
  print 'Hello %s' % options.person

if __name__ == '__main__':
  main()

ソース: Pythonを、UNIXコマンドラインツール

しかしながら、Python2.7optparseは推奨されていません、 を利用する理由argparseよoptparseは?

う場合に必要がある場合がありますので、この助けが必要な場合 グラブ unicodeの引数またはWin32(2K/XP/server等):


from ctypes import *

def wmain(argc, argv):
    print argc
    for i in argv:
        print i
    return 0

def startup():
    size = c_int()
    ptr = windll.shell32.CommandLineToArgvW(windll.kernel32.GetCommandLineW(), byref(size))
    ref = c_wchar_p * size.value
    raw = ref.from_address(ptr)
    args = [arg for arg in raw]
    windll.kernel32.LocalFree(ptr)
    exit(wmain(len(args), args))
startup()

軽量コマンドライン引数にデフォルト

argparse バスタブとシャワールームが右に回答されたコマンドラインのスイッチおよび高度な機能を使用でき関数の引数はデフォルトで取り扱うかの位置引数によって私たちは疲れを感じます。

import sys

def get_args(name='default', first='a', second=2):
    return first, int(second)

first, second = get_args(*sys.argv)
print first, second

の'name'の引数を捉え、スクリプト名が使用されていない。試験出力は以下のようなものです:

> ./test.py
a 2
> ./test.py A
A 2
> ./test.py A 20
A 20

簡単なスクリプトがんの一部のデフォルト値が、私はそれも十分です。だれもいなど一部の型強制は、戻り値またはコマンドライン値はすべての文字列です。

と思いニーズに合わせたサービスがプロジェクトoptparseは、ごしやすいよう http://werkzeug.pocoo.org/documentation/script います。

from werkzeug import script

# actions go here
def action_foo(name=""):
    """action foo does foo"""
    pass

def action_bar(id=0, title="default title"):
    """action bar does bar"""
    pass

if __name__ == '__main__':
    script.run()

なので基本的にはすべての機能action_*は、コマンドラインや ヘルプメッセージが生成されます。

python foo.py 
usage: foo.py <action> [<options>]
       foo.py --help

actions:
  bar:
    action bar does bar

    --id                          integer   0
    --title                       string    default title

  foo:
    action foo does foo

    --name                        string

うoptparseにgetopt.で宣:をしないといけないと考えていいの名前のオプションの効果るもの(例えば、設定booleanフィールドで手に戻り、辞書の人口のお客様のご要望に合わせた仕様.

http://docs.python.org/lib/module-optparse.html

consoleargs 値が挙げられます。でも使いやすいです。チェックアウト:

from consoleargs import command

@command
def main(url, name=None):
  """
  :param url: Remote URL 
  :param name: File name
  """
  print """Downloading url '%r' into file '%r'""" % (url, name)

if __name__ == '__main__':
  main()

現在、コンソール:

% python demo.py --help
Usage: demo.py URL [OPTIONS]

URL:    Remote URL 

Options:
    --name -n   File name

% python demo.py http://www.google.com/
Downloading url ''http://www.google.com/'' into file 'None'

% python demo.py http://www.google.com/ --name=index.html
Downloading url ''http://www.google.com/'' into file ''index.html''

Argparseすることが可能で以上に実際のコード!

ことになる問題を見たいのほとんどの人気は引数の構文解析オプションの場合はパラメータは控えめですが、コードを書いが膨大な利益になれます。

相対的な新の引数の構文解析のシーンっていました。) plac.

でも認められレードオフとargparseによっては、インライントラップだけで周辺 main() 型機能機能:

def main(excel_file_path: "Path to input training file.",
     excel_sheet_name:"Name of the excel sheet containing training data including columns 'Label' and 'Description'.",
     existing_model_path: "Path to an existing model to refine."=None,
     batch_size_start: "The smallest size of any minibatch."=10.,
     batch_size_stop:  "The largest size of any minibatch."=250.,
     batch_size_step:  "The step for increase in minibatch size."=1.002,
     batch_test_steps: "Flag.  If True, show minibatch steps."=False):
"Train a Spacy (http://spacy.io/) text classification model with gold document and label data until the model nears convergence (LOSS < 0.5)."

    pass # Implementation code goes here!

if __name__ == '__main__':
    import plac; plac.call(main)

この方法は、図書室、仕事でした。

目標はエッセイは英語で書きは、各引数の構文解析による単一の引数ラインナップを読みやすさ、コードは簡単には依存せず、常に特別なモジュール(os+sys),警報または未知の引数を優雅に、使用範囲()ループは、全python2.x、3.x

表示は切り替えフラグ(-d、-v)の値に制御する引数(-私は○○は、-o xxx)。

import os,sys

def HelpAndExit():
    print("<<your help output goes here>>")
    sys.exit(1)

def Fatal(msg):
    sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), msg))
    sys.exit(1)

def NextArg(i):
    '''Return the next command line argument (if there is one)'''
    if ((i+1) >= len(sys.argv)):
        Fatal("'%s' expected an argument" % sys.argv[i])
    return(1, sys.argv[i+1])

### MAIN
if __name__=='__main__':

    verbose = 0
    debug   = 0
    infile  = "infile"
    outfile = "outfile"

    # Parse command line
    skip = 0
    for i in range(1, len(sys.argv)):
        if not skip:
            if   sys.argv[i][:2] == "-d": debug ^= 1
            elif sys.argv[i][:2] == "-v": verbose ^= 1
            elif sys.argv[i][:2] == "-i": (skip,infile)  = NextArg(i)
            elif sys.argv[i][:2] == "-o": (skip,outfile) = NextArg(i)
            elif sys.argv[i][:2] == "-h": HelpAndExit()
            elif sys.argv[i][:1] == "-":  Fatal("'%s' unknown argument" % sys.argv[i])
            else:                         Fatal("'%s' unexpected" % sys.argv[i])
        else: skip = 0

    print("%d,%d,%s,%s" % (debug,verbose,infile,outfile))

の目標NextArg()は次の引数をチェックのためのデータの欠落、スキップ'スキップのループがNextArg()を使用して、フラグの構文解析の一ライナー.

まErcoのアプローチするために必要な固定引数およびオプション引数になります。これらは優先さ-d、-vなど。引数になります。

位置およびオプション引数は取得できるとPosArg(i)およびOptArg(i,デフォルトするものではありません。時のオプションの引数が、開始位置を検索オプション例-i)は1先を避けるが、予期しない致命的にするかもしれない。

import os,sys


def HelpAndExit():
    print("<<your help output goes here>>")
    sys.exit(1)

def Fatal(msg):
    sys.stderr.write("%s: %s\n" % (os.path.basename(sys.argv[0]), msg))
    sys.exit(1)

def NextArg(i):
    '''Return the next command line argument (if there is one)'''
    if ((i+1) >= len(sys.argv)):
        Fatal("'%s' expected an argument" % sys.argv[i])
    return(1, sys.argv[i+1])

def PosArg(i):
    '''Return positional argument'''
    if i >= len(sys.argv):
        Fatal("'%s' expected an argument" % sys.argv[i])
    return sys.argv[i]

def OptArg(i, default):
    '''Return optional argument (if there is one)'''
    if i >= len(sys.argv):
        Fatal("'%s' expected an argument" % sys.argv[i])
    if sys.argv[i][:1] != '-':
        return True, sys.argv[i]
    else:
        return False, default


### MAIN
if __name__=='__main__':

    verbose = 0
    debug   = 0
    infile  = "infile"
    outfile = "outfile"
    options_start = 3

    # --- Parse two positional parameters ---
    n1 = int(PosArg(1))
    n2 = int(PosArg(2))

    # --- Parse an optional parameters ---
    present, a3 = OptArg(3,50)
    n3 = int(a3)
    options_start += int(present)

    # --- Parse rest of command line ---
    skip = 0
    for i in range(options_start, len(sys.argv)):
        if not skip:
            if   sys.argv[i][:2] == "-d": debug ^= 1
            elif sys.argv[i][:2] == "-v": verbose ^= 1
            elif sys.argv[i][:2] == "-i": (skip,infile)  = NextArg(i)
            elif sys.argv[i][:2] == "-o": (skip,outfile) = NextArg(i)
            elif sys.argv[i][:2] == "-h": HelpAndExit()
            elif sys.argv[i][:1] == "-":  Fatal("'%s' unknown argument" % sys.argv[i])
            else:                         Fatal("'%s' unexpected" % sys.argv[i])
        else: skip = 0

    print("Number 1 = %d" % n1)
    print("Number 2 = %d" % n2)
    print("Number 3 = %d" % n3)
    print("Debug    = %d" % debug)
    print("verbose  = %d" % verbose)
    print("infile   = %s" % infile)
    print("outfile  = %s" % outfile) 
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top