[absl] flag

About_work·2024년 2월 2일
0

python 기초

목록 보기
28/65

1. 들어가기 전에

1.1. CL Arguments

  • 프로그램을 커맨드라인(명령 프롬프트나 터미널)을 통해 실행할 때, 프로그램 이름 뒤에 공백으로 구분하여 추가하는 입력 값들
    • 예: python script.py arg1 arg2 에서, arg1, arg2

1.1.1. python에서 CL Arugments 이용하기

  • sys.argvs 사용
import sys

# 커맨드라인 인자 출력
print("Program name:", sys.argv[0])
for i, arg in enumerate(sys.argv[1:], start=1):
    print(f"Argument {i}: {arg}")
  • python example.py arg1 arg2를 실행하면, arg1과 arg2가 각각 인자로 전달되어 출력
    • argv[0] = example.py

1.2. Flag 란? (CL Option)

  • "커맨드라인 옵션" 또는 "플래그"는 CL Arguments 중에서, 프로그램의 특정 동작을 제어하기 위해 사용되는 옵션
  • 일반적으로 하이픈(-) 또는 더블 하이픈(--)으로 시작하는 짧은 옵션 문자나 긴 옵션 문자열로 구성

1.2.1. 커맨드라인 옵션의 특징

  • 선택적 사용: 대부분의 커맨드라인 옵션은 선택적으로 사용되며, 제공하지 않을 경우 프로그램은 기본 설정 또는 동작으로 실행됩니다.
  • 단축형과 전체형: 많은 프로그램들은 옵션을 짧은 형태(-v 같은)와 긴 형태(--version 같은)로 제공합니다. 짧은 형태는 보통 하이픈 하나로 시작하고 한 글자이며, 긴 형태는 하이픈 두 개로 시작하고 여러 글자입니다.
  • 값을 가질 수 있음: 일부 옵션은 단순한 스위치 역할만 하지 않고, 추가적인 값을 받을 수 있습니다(예: --output=filename.txt 또는 -o filename.txt).

1.2.2. 예제

grep 명령어를 사용하여 파일에서 텍스트를 검색할 때 다양한 옵션을 사용할 수 있습니다:

  • -i 옵션은 대소문자를 구분하지 않고 검색하라는 의미입니다.
  • -v 옵션은 지정된 패턴을 포함하지 않는 모든 줄을 출력하라는 의미입니다.
  • -n 옵션은 각 일치하는 줄 앞에 줄 번호를 출력하라는 의미입니다.
grep -i "example" filename.txt
  • 이 명령은 filename.txt 파일에서 대소문자를 구분하지 않고 "example" 텍스트를 검색합니다.

1.3. absl.flags VS argparse


2. 사용법

from absl import app, flags

# 플래그 정의
flags.DEFINE_string('name', None, 'Your name')
flags.DEFINE_integer('age', None, 'Your age')
flags.DEFINE_boolean('debug', False, 'Produces debugging output')

FLAGS = flags.FLAGS

def main(argv):
    del argv  # 명령줄 인자를 직접 처리할 필요가 없을 때 사용합니다.
    
    if FLAGS.debug:
        print("Debugging mode on")
        
    print(f"Name: {FLAGS.name}")
    print(f"Age: {FLAGS.age}")

if __name__ == '__main__':
    app.run(main) # absl은 내부적으로 sys.argv를 파싱하여 정의된 플래그들을 처리
python example.py --name="John Doe" --age=30 --debug
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글