파이썬에서 명령 행 인수에 어떻게 접근합니까?


362

파이썬을 사용하여 프로젝트 설정을 만들지 만 명령 줄 인수를 얻는 데 도움이 필요합니다.

나는 이것을 터미널에서 시도했다.

$python myfile.py var1 var2 var3

내 파이썬 파일에서 입력 된 모든 변수를 사용하고 싶습니다.


1
베이커 모듈은 Python 명령 행 앱을 작성하기위한 훌륭한 도구입니다. pypi.python.org/pypi/Baker/1.02
스파이크 Gronim

답변:



115
import sys

sys.argv[1:]

인수 목록을 제공합니다 (파이썬 파일 이름 제외)


5
무슨 [1:]뜻입니까?
Kolob Canyon

8
그 의미 @KolobCanyon 즉, 첫 번째 요소 건너 뛰기, "끝까지 인덱스 1에서 시작하는 하위 목록을"
카밀 Jarosz

@KolobCanyon은 두 번째 인수를 [1:]위쪽으로 가져옵니다. 첫 번째 인수 sys.argv는 기본적으로 예를 들어 실행중인 python 파일의 이름 이기 때문 testrun.py입니다.
사무엘은

94

argparsePython 2.7 이상과 함께 제공되는 것이 좋습니다 .

argparse모듈은 보일러 플레이트 코드를 줄이고 코드를 더욱 강력하게 만듭니다. 모듈은 모든 표준 유스 케이스 (하위 명령 포함)를 처리하고 사용자를위한 도움말 및 사용법을 생성하며 사용자 입력을 확인 및 위생 처리합니다. sys.argv접근 방식 을 사용 하고 있습니다. 그리고 그것은 무료입니다 (내장).

여기 작은 예가 있습니다 :

import argparse

parser = argparse.ArgumentParser("simple_example")
parser.add_argument("counter", help="An integer will be increased by 1 and printed.", type=int)
args = parser.parse_args()
print(args.counter + 1)

그리고 출력 python prog.py -h

usage: simple_example [-h] counter

positional arguments:
  counter     counter will be increased by 1 and printed.

optional arguments:
  -h, --help  show this help message and exit

그리고 python prog.py 1당신이 기대 한대로 :

2

7
품질 답변, 왜 여기에 다른 사람이 여기에 주어진 다른 접근법을 사용하는지 확실하지 않습니다. 특히 내장되어 있기 때문에! 파싱보다 더 좋은 일이 있습니까?
Bassinator

args 네임 스페이스의 특정 인수에 액세스하는 방법을 언급하면 ​​다음과 같습니다. args.counter
MikeL

1
@Bassinator 인수 구문 분석이 필요하지 않은 경우.
활동 감소

명령 행에 특정 값없이 기본값을 사용하려면 다음과 같이 사용할 수 있습니다. parser.add_argument('var3', nargs='?', type=int, default=3)var3은 선택적 매개 변수입니다. 명령 행에 값을 지정하지 않으면 코드에서 var3에 액세스 할 수 있습니다 (var3의 기본값). = 3
Albicocco

56

파이썬 코드 :

import sys

# main
param_1= sys.argv[1] 
param_2= sys.argv[2] 
param_3= sys.argv[3]  
print 'Params=', param_1, param_2, param_3

기도:

$python myfile.py var1 var2 var3

산출:

Params= var1 var2 var3 

24

sys.argv인수를 목록으로 가져 오는 데 사용할 수 있습니다 .

개별 요소에 액세스해야하는 경우

sys.argv[i]  

여기서 iindex 0는 실행중인 파이썬 파일 이름을 제공합니다. 그 이후의 모든 인덱스는 전달 된 인수입니다.


6

다음과 같이 호출하면 $ python myfile.py var1 var2 var3

import sys

var1 = sys.argv[1]
var2 = sys.argv[2]
var3 = sys.argv[3]

sys.argv[0]항상 현재 작업 디렉토리 인 배열과 비슷합니다 .


6
sys.argv[0]현재 작업 디렉토리가 아닙니다. 실행중인 파일의 이름입니다.

5

내가 생각할 수있는 몇 가지 추가 사항.

@allsyed가 말했듯이 sys.argv는 구성 요소 목록 (프로그램 이름 포함)을 제공하므로 명령 줄을 통과하는 요소 수를 알고 싶다면 len ()을 사용하여 결정할 수 있습니다. 이를 기반으로 사용자가 특정 수의 매개 변수를 전달하지 않은 경우 예외 / 오류 메시지를 설계 할 수 있습니다.

또한 명령 줄 인수를 처리하는 더 좋은 방법을 찾고 있다면 https://docs.python.org/2/howto/argparse.html참조하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.