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에서 나에게 인사하세요.
Reference
이 문제에 관하여(Python에서 명령줄 도구를 쉽게 빌드하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/thuwarakesh/how-to-easily-build-command-line-tools-in-python-60j텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)