Python에서 명령줄 도구를 쉽게 빌드하는 방법은 무엇입니까?

graphical UI보다 명령줄 도구를 개발하는 것이 훨씬 쉽습니다. 그러나 이전보다 Python에서 더 쉽습니다.

Typer 은 일반적인 기능을 명령줄 유틸리티로 변환하는 데 도움이 되는 편리한 도구입니다.

대부분의 CLI에서 일반적으로 필요한 것은 사용자의 인수를 수락하는 것입니다. Typer를 사용하면 이 작업을 매우 쉽게 수행할 수 있습니다. 또한 Typer에는 출력 스타일을 지정할 수 있는 유연성도 있습니다.

이 모든 것은 두 줄의 마법 같은 코드로 이루어집니다!

다음은 이름을 받아들이고 인사하는 간단한 파이썬 함수입니다. 두 줄의 Typer 코드가 CLI로 변경되었습니다.

Typer를 사용하지 않는 경우 다음을 수행할 수 있습니다use the standard module, argparser to create CLIs. 그러나 Typer는 argparser보다 훨씬 쉽습니다.

Python에서 첫 번째 명령줄 도구를 만듭니다.



가이드의 나머지 부분을 시작하기 전에 로컬 컴퓨터 또는 가상 환경에서 install typer 하시기 바랍니다. 다음 코드가 도움이 될 것입니다.

pip install typer[all]



import typer

def main(name: str):
   print(f"Hello {name}")

if __name__ == "__main__":
   typer.run(main)


Python 스크립트의 이름을 app.py로 지정했다고 가정해 보겠습니다. 인수를 사용하여 터미널에서 Python 스크립트를 실행하면 입력 값에 hello를 인쇄하는 것을 볼 수 있습니다.

(env) $ python app.py thuwa
Hello thuwa

(env) $ python app.py
Usage: app.py [OPTIONS] NAME
Try 'app.py --help' for help.
╭─ Error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ Missing argument 'NAME'.                                                                                             │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯


위의 예에서 인수 없이 스크립트를 실행하려고 하면 실패하는 것을 볼 수도 있습니다. 그러나 코드를 조정하고 이름 매개변수에 기본값을 지정해 보십시오. 이렇게 하면 명령줄 인수 'name'이 선택적 인수가 됩니다.

def main(name: str = "world"):
    print(f"Hello {name}")



(env) $ python app.py
Hello world


동일한 Python 스크립트에서 여러 명령줄 함수를 만듭니다.



종종 파이썬 스크립트에 하나 이상의 함수를 갖고 싶을 것입니다. 이러한 경우 명령줄 유틸리티로 표시되는 부분을 선택할 수 있습니다.

예를 들어 다음 스크립트에는 세 개의 Python 함수가 있습니다. 하나는 안녕이고 다른 하나는 안녕입니다. 또한 '도망쳐'라고 말하는 세 번째 기능이 있습니다.

우리는 처음 두 개를 명령줄 함수로 변환하고 마지막 것은 그대로 두려고 합니다.

다음 스크립트가 이를 수행합니다.

import typer

app = typer.Typer()

@app.command()
def say_hi(name: str):
    print(f"Hello {name}")

@app.command()
def say_bye(name: str):
    print(f"Bye {name}!")

if __name__ == "__main__":
    app()


이 스크립트는 이전의 간단한 예제보다 조금 더 복잡해 보일 수 있습니다. 그러나 그렇지 않습니다.

이 예에서는 Typer 앱을 만들고 수동으로 명령을 추가합니다. @app.command로 기능에 주석을 달아 명령을 추가합니다.

기본 앱에서 우리는 앱 자체를 호출했습니다.

이제 마지막에 --help가 있는 스크립트를 실행하고 아름다운 도움말 문서가 화면에 인쇄되는 것을 확인하십시오.

(env) $ python app.py --help

 Usage: app.py [OPTIONS] COMMAND [ARGS]...

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --install-completion          Install completion for the current shell.                                              │
│ --show-completion             Show completion for the current shell, to copy it or customize the installation.       │
│ --help                        Show this message and exit.                                                            │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Commands ───────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ say-bye                                                                                                              │
│ say-hi                                                                                                               │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯


도움말 메뉴에서 @app.command 로 주석을 추가한 두 가지 기능을 볼 수 있습니다. 명령줄에서 인수와 함께 사용할 수 있습니다.

runaway 함수는 스크립트에 있지만 CLI가 아님을 알 수 있습니다. 이 명령을 실행하려고 하면 아래와 같이 실패합니다.

env) $ python app.py say-hi thuwa
Hello thuwa
(env) $ python app.py say-bye thuwa
Bye thuwa!
(env) $ python app.py run-away thuwa
Usage: app.py [OPTIONS] COMMAND [ARGS]...
Try 'app.py --help' for help.
╭─ Error ──────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ No such command 'run-away'.                                                                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯


CLI에서 셸 명령을 실행합니다.



찾기 및 바꾸기 명령을 작성하고 싶었습니다. 현재 디렉터리의 모든 파일 내부로 들어가 값을 바꿔야 합니다.

다음 명령을 사용하여 Linux에서 수행할 수 있습니다.
find ./ -type f -exec sed -i -e 's/<FIND VALUE>/<REPLACE VALUE>/g' {} \;
그러나 위의 함수는 기억하고 재사용하기가 어렵습니다. 편리한 Python 래퍼를 만들어 봅시다.

shell command inside Python을 실행할 수 있습니다.

import typer
import subprocess

def replace(old: str, new: str):
    """Find and replace 'old' with 'new' in every file in the current directory"""

    command = [
        "find",
        "./",
        "-type",
        "f",
        "-exec",
        "sed",
        "-i",
        f"s/{old}/{new}/g",
        "{}",
        ";",
    ]

    subprocess.call(command)

if __name__ == "__main__":
    typer.run(replace)


이것은 폴더에서 값을 찾고 바꾸는 매우 파이썬적인 방법이 아닐 수 있습니다. 그러나 CLI 래퍼 내에서 셸 명령을 실행하는 방법을 잘 설명합니다.


읽은 내용이 마음에 드셨나요? Consider subscribing to my email newsletter 이런 식으로 더 자주 게시하기 때문입니다.

읽어줘서 고마워, 친구! , 및 Medium에서 나에게 인사하세요.

좋은 웹페이지 즐겨찾기