Python Arguments를 이용하여 Script(.py) 실행하는 2가지 방법

YU NA Joe·2022년 8월 8일

1. Python 내장 모듈 sys의 sys.argv 사용

import sys


# sys.argv[0]은 실행된 파일 경로 

def print_help():
    print("안녕!!!")
    
if __name__ == "__main__":
    arguments = sys.argv
    # 즉 리스트 길이가 한개이면, sys.argv[0](실행된 파일 경로)만 있으면      
    if len(arguments) == 1: 
        print("인자가 없습니다. 해당되는 param을 입력해주세요!")    
    # 받은 인자가 --연아 또는 --연아2 면은 ?!     
    elif arguments[1] == "--연아" or arguments[1] == "--연아2":
        print_help()
    else:
        print("인자가 형식에 맞지 않습니다!")        

        

2. Argparse 모듈 사용




import argparse

# parser 객체 만들기 
parser = argparse.ArgumentParser(description='튜토리얼')

# parser에 인자 추가하기 
parser.add_argument('--number','-num', type=int, 
                    help="연습입니다아")
                    
args = parser.parse_args()
for i in range(1,args.number+1):
    print(f"숫자들: {i}")


(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>argparse연습.py --number 5
1
2
3
4
5

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>argparse연습.py --number 5
숫자들: 1
숫자들: 2
숫자들: 3
숫자들: 4
숫자들: 5

--help 또는 -h

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --help
usage: argparse연습.py [-h] [--number NUMBER]

튜토리얼

optional arguments:
  -h, --help       show this help message and exit
  --number NUMBER  연습입니다아

argument 이름 정의

인자의 이름을 지정할 때 여러 이름을 짓는 것이 가능하다. 지정할 때 두 개를 연속해서 나열한다. 보통 1~2개를 지정하는데, --help와 -h같이 fullname과 약자를 하나씩 지정하는 편 
fullname은 하이픈 두개!, 별칭은 하이픈 하나!

import argparse

parser = argparse.ArgumentParser(description='튜토리얼') 

# (number이 fullname, num이 별칭)
parser.add_argument('--number','-num', type=int, 
                    help="연습입니다아")       
args = parser.parse_args()
for i in range(1,args.number+1):
    print(f"숫자들: {i}")
    
    
 
(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --number 5
숫자들: 1
숫자들: 2
숫자들: 3
숫자들: 4
숫자들: 5


(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --num 5
숫자들: 1
숫자들: 2
숫자들: 3
숫자들: 4
숫자들: 5

type 지정

- parse_args()가 주어진 인자들을 파싱할 때는 모든 문자를 숫자 등이 아닌 문자열 취급
- type은 Common built-in types과 functions이 사용 가능. common built-in은 str, int, float, bool, etc..  
- list는 안된다. 

parser.add_argument('--number','-num', type=int, 
                    help="연습입니다아")      

positional / optional 인자

import argparse 
parser = argparse.ArgumentParser(description='튜토리얼')


parser.add_argument('--number','-num', type=int)  # optional 
parser.add_argument('name')  # positional
args = parser.parse_args()
print("args.number: ", args.number)
print("args,name: ", args.name)
positional 인자는 반드시 지정해주어야 한다. 아래는 optional 인자인, name만 지정한 모습 
(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --number 3
argparse연습.py: error: the following arguments are required: name


optional 인자는 지정해 주지 않아도 된다. 지정해주지 않으면, optional의 default값

positional인자 with optional 인자
position인자 without optional 인자  
. 

**number의 값을 지정해 주지 않아서, None이 나옴
(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py 연아
args.number:  None
args,name:  연아



(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --number 3 연아     
args.number:  3
args,name:  연아

** positional args의 값을 쓸 때는, 값만! 써야 한다( 인자값이란 값이 사용하면 X) 


(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py name 연아
usage: argparse연습.py [-h] [--number NUMBER] name
argparse연습.py: error: unrecognized arguments: 연아

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --number 3 name 연아
usage: argparse연습.py [-h] [--number NUMBER] name
argparse연습.py: error: unrecognized arguments: 연아

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py 연아   
args.number:  None
args,name:  연아

** optional 인자는 `--foo 3`또는 `--foo=3` 두 가지 방식으로 지정할 수 있다. 

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --number=5 연아
args.number:  5
args,name:  연아

default 값 지정

parser.add_argument('name')  # positional
parser.add_argument('--number','-num', type=int, default=10)  # optional 


(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py 여나당              
args.number:  10
args,name:  여나당

cf. default에 argparse.SUPPRESS를 적을 경우, 인자를 적지 않았을 때 None이 아닌 아예 인자 자체가 생성되지 않는다 ( default=argparse.SUPPRESS) 만 하면은 오류..

action의 종류 지정

1. append  

import argparse
parser = argparse.ArgumentParser(description='튜토리얼') 
parser.add_argument('--name', '-n', action='append') 
args = parser.parse_args()
print("args,name: ", args.name) 

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --name=연아             
args,name:  ['연아']

(venv2) C:\Users\yunaj\CRAWLING2\CommandPractice>python argparse연습.py --name=연아 --name=연아2
args,name:  ['연아', '연아2'] 
2. dest 

import argparse 

parser = argparse.ArgumentParser(description='튜토리얼')
# parser에 인자 추가하기 
parser.add_argument('--name', '-n', action='append', dest="name_list") 
args = parser.parse_args()
#print("args,name: ", args.name_list)
for name in args.name_list:
    print(name)  

연아
연아2

참고

https://mentha2.tistory.com/202
https://basketdeveloper.tistory.com/
https://appia.tistory.com/507

0개의 댓글