도움이 되었습니까?

해결책

표준 라이브러리의 정식 솔루션은 다음과 같습니다. argparse (문서):

예는 다음과 같습니다.

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 모듈은 위치 및 선택적 인수를 처리 할 수 ​​있지만 OptParse는 선택적인 인수 만 처리 할 수 ​​있습니다.

  • Argparse는 명령 줄 인터페이스가 어떻게 보이는지에 대해 독단적이지 않습니다 - 필수 옵션과 같이 -file 또는 /file과 같은 옵션이 지원됩니다.OptParse는 이러한 기능을 지원하지 않고 실용성보다 순도를 선호합니다.

  • Argparse는 귀하의 인수에서 결정된 명령 줄 사용을 포함하여보다 유익한 사용 메시지를 생성하고 위치 및 선택적 인수 모두에 대한 메시지를 도와줍니다.OptParse 모듈은 자신의 사용 문자열을 작성해야하며 위치 인수에 대한 도움을 표시 할 방법이 없습니다.

  • Argparse는 가변 수의 명령 줄 아르를 소비하는 조치를 지원하는 반면 OptParse는 정확한 수의 인수를 요구합니다 (예 :1, 2 또는 3) 미리 알려진

  • Argparse는 하위 명령으로 파견되는 파서를 지원하는 반면 OptParse는 설정이 필요합니다.allow_interspersed_args 그리고 파서 파견을 수동으로 파견합니다

그리고 제가 개인적으로 가장 좋아하는 것은:

  • ArgParse는 유형 및 작업 매개 변수를 허용합니다 add_argument()OptParse는 간단한 콜블블로 지정하려면 다음과 같은 해킹 클래스 속성이 필요합니다.STORE_ACTIONS 또는 CHECK_METHODS 적절한 인수 점검을 받으려면

도 있습니다 argparse stdlib 모듈 (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

이를 수행하는 한 가지 방법은 다음을 사용하는 것입니다. sys.argv.그러면 스크립트 이름이 첫 번째 인수로 인쇄되고 여기에 전달되는 다른 모든 매개변수가 인쇄됩니다.

import sys

for arg in sys.argv:
    print arg

그만큼 문서화하다 도서관은 정말 미끄러워요.앱의 사용 문자열에서 인수 사전을 작성합니다.

예를 들어 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를 직접 사용하지만 Simon Willison이 최근에 소개한 방향을 정말 좋아합니다. optfunc 도서관.다음과 같이 작동합니다.

"함수 정의 (인수 및 기본값 포함)를 내성하고이를 사용하여 명령 줄 인수 파서를 구성합니다."

예를 들어 다음 함수 정의는 다음과 같습니다.

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

이 optparse 도움말 텍스트로 바뀌었습니다.

    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"를 암시적으로 만듭니다).

보시다시피 선택 분석 "opparse 모듈은 더 이상 사용되지 않으며 더 이상 개발되지 않습니다.개발은 계속될 것입니다. 인수 기준 치수."

포쿠의 딸깍 하는 소리 더 직관적이고 상용구가 덜 필요하며 최소한 argparse만큼 강력합니다.

지금까지 내가 만난 유일한 약점은 도움말 페이지에 대해 많은 사용자 정의를 수행할 수 없다는 것입니다. 그러나 이는 일반적으로 요구 사항이 아니며 문서화하다 그렇다면 분명한 선택인 것 같습니다.

명령줄 인수를 더욱 쉽게 처리하기 위해 제가 작성한 작은 Python 모듈에 관심이 있으실 수도 있습니다(오픈 소스 및 무료 사용). 특공대

나는 보는 것을 추천한다 문서화하다 다른 것들에 대한 간단한 대안으로.

docopt는 모든 것을 직접 구현하도록 요구하는 대신 --help 사용 메시지를 구문 분석하여 작동하는 새로운 프로젝트입니다.POSIX 형식으로 사용법 메시지를 입력하면 됩니다.

또 다른 옵션은 아아.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()

도움말 등이 자동으로 생성되며 데코레이터를 사용하여 인수 구문 분석 작동 방식에 대한 추가 지침을 제공할 수 있습니다.

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

내 솔루션은 진입점2.예:

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