Skip to content

Python 실행 옵션

Python을 실행할 때, command line 입력을 통해 추가적인 옵션을 입력할 수 있다.


최적화 실행

프로그램의 품질 향상을 위해 assert 구문과 Docstring을 사용하는데, 해당 코드도 결국 메모리와 CPU 성능을 소모하게 된다.

아래 옵션을 통해 프로그램 실행 시에 해당 구문을 삭제하고 실행하도록 할 수 있다.

  • -O: assert 구문 무시
  • -OO: assert 구문 무시 + 코드 인터프리트 시 Docstring 삭제

Note

대부분의 경우 Docstring이 차지하는 리소스는 극히 미미하기 때문에 -OO 옵션은 임베디드 정도의 환경에서나 사용한다고 한다.

main.py
def main():
    assert isinstance(1, str)  # (1)!
    print(True)


if __name__ == "__main__":
    main()
  1. AssertionError가 반드시 발생한다.

위와 같이 AssertionError가 반드시 발생하는 코드를 만들고 -O 옵션이 있을 때와 없을 때의 차이를 확인해보면 아래와 같다.

  • -O 옵션이 입력되지 않았을 때

main.py
Traceback (most recent call last):
  File "C:\projects\python311\main.py", line 6, in <module>
    main()
  File "C:\projects\python311\main.py", line 2, in main
    assert isinstance(1, str)
AssertionError

  • -O 옵션이 입력되었을 때

python -O main.py
True

프로그램 설명 출력

ArgumentParser를 통해 시스템 args를 입력 받는 프로그램의 설명을 출력하려면 -h, --help 옵션을 사용하면 된다.

main.py
from argparse import ArgumentParser


def main(*, arg: str):
    print(arg)


if __name__ == "__main__":
    parser = ArgumentParser()
    parser.add_argument("--arg", type=str, default="test", help="argument sample")
    kwargs = vars(parser.parse_args())

    main(**kwargs)
main.py -h
usage: main.py [-h] [--arg ARG]

options:
  -h, --help  show this help message and exit
  --arg ARG   argument sample

모듈 Docstring 출력

함수나 클래스의 Docstring은 해당 객체의 __doc__을 호출하면 된다.

모듈의 Docstring을 출력하고 싶다면 아래와 같이 pydoc을 사용하면 된다.

main.py
r"""
this is main module

this is description 1
this is description 2
this is description 3
"""


def main(): ...


if __name__ == "__main__":
    main()
python -m pydoc main
Help on module main:

NAME
    main - this is main module

DESCRIPTION
    this is description 1
    this is description 2
    this is description 3

FUNCTIONS
    main()

FILE
    c:\projects\python311\main.py

Note

아래와 같이 -n, -b 옵션을 사용하면 서버를 시작하고 웹브라우저를 통해 내용을 확인할 수 있다.

python -m pydoc -n <hostname>
python -m pydoc -b

Tip

사실 위 방법은 실행 시간이 조금 오래 걸리기 때문에 아래와 같이 if __name__ == "__main__":으로 모듈 직접 실행 시에 설명만 출력되도록 하는 방법도 좋다.

def func(): ...


if __name__ == "__main__":
    print("this is module description")
this is module description


Reference