저는 원래 C 프로그래머입니다. 나는 많은 다른 주장을 읽는 수많은 트릭과 “해킹”을 보았다.
파이썬 프로그래머가 할 수있는 몇 가지 방법은 무엇입니까?
관련
답변
표준 라이브러리의 표준 솔루션은 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()
간단한 callables 로 type 및 action 매개 변수를 지정할 수 있지만 optparse는 해킹 클래스 속성과 같은 해킹 클래스 속성이 필요
STORE_ACTIONS
하거나CHECK_METHODS
적절한 인수 검사가 필요합니다
답변
또한이 argparse
다음 stdlib 모듈 (다음 stdlib의에서 “impovement” 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의 라이브러리는 정말 매끄러운입니다. 앱의 사용 문자열에서 인수 dict를 작성합니다.
예를 들어 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
다음과 같은 출력을 생성합니다.
제임스 스미스 안녕하세요