Python Fire 하이픈 대 밑줄

Oct 16 2020

파이썬 패키지 Fire는 명령 줄에서 파이썬 스크립트를 시작하는 데 매우 유용합니다. 한 가지 공통점은 여러 단어로 구성된 인수를 갖는 것입니다. 예를 들어 3 가지 공통 방식으로 작성할 수있는 cat의 이름 :

  • nameofcat
  • name_of_cat
  • 고양이 이름

첫 번째는 거의 모든 것과 호환되지만 두 번째는 bash에서 피해야합니다 ( POSIX 스타일 운영 체제의 명령 줄 옵션이 밑줄 스타일이어야합니까? ). 그리고 세 번째는 파이썬 ( 왜 파이썬은 내부에서 하이픈 사용을 허용하지 않습니다. 함수 및 변수 이름? ).

여기서 문제는 기본적으로 fire가 파이썬 코드에서 인수 이름을 취한다는 것입니다. 즉, 파이썬 코드가 다음과 같은 경우를 의미합니다.

script.py :

import fire
def main(name_of_cat='Steve'):
    print(f'The name of the cast is {name_of_cat}')
if __name__ == '__main__':
    fire.Fire(main)

그런 다음 명령 줄 (또는 bash 스크립트)에서 호출하려면 다음을 수행합니다.

python script.py --name_of_cat Bob

이것이 제가 현재 사용하고있는 방식이지만 차선책으로 느껴집니다. 모범 사례가 무엇인지에 대한 아이디어가 있습니까?

추신 : python script.py --name-of-cat Bob파이썬은 변수 이름에 하이픈을 사용할 수 없기 때문에 불가능합니다.

답변

2 JonathanDayton Oct 24 2020 at 04:07

이 코드 줄 때문에 하이픈 또는 밑줄과 함께 작동하는 것처럼 보입니다 . 스크립트 사용 :

> python .\script.py --name_of_cat Bob
The name of the cast is Bob
> python .\script.py --name-of-cat Bob
The name of the cast is Bob

이것은 Fire 문서 에도 언급되어 있습니다 .

a를 인스턴스화 한 Building다음 climb_stairs함수 를 실행 하려면 다음 명령이 모두 유효합니다.

$ python example.py --name="Sherrerd Hall" --stories=3 climb_stairs 10 $ python example.py --name="Sherrerd Hall" climb_stairs --stairs_per_story=10
$ python example.py --name="Sherrerd Hall" climb_stairs --stairs-per-story 10 $ python example.py climb-stairs --stairs-per-story 10 --name="Sherrerd Hall"

하이픈과 밑줄 ( -_)은 멤버 이름과 플래그 이름에서 서로 바꿔 사용할 수 있습니다.

그러나 생성 된 도움말 텍스트는 밑줄이있는 플래그를 요구하는 것 같습니다.

> python .\script.py -h
INFO: Showing help with the command 'script.py -- --help'.

NAME
    script.py

SYNOPSIS
    script.py <flags>

FLAGS
    --name_of_cat=NAME_OF_CAT

내 권장 사항은 빠른 스크립트를 직접 작성하는 경우 Fire는 훌륭하지만 배포하거나 더 복잡한 것을 만드는 경우 argparse (stdlib에 포함) 와 같은보다 구성 가능한 프레임 워크를 사용하는 것이 좋습니다. (내가 좋아하는)를 클릭합니다 . 다음 은 Fire의 자칭 혜택 목록입니다. 사용 사례가 더 복잡한 경우 다른 라이브러리가 더 좋을 수 있습니다.

Simplecode Oct 19 2020 at 20:25

Fire모듈에 대해서는 확실 하지 않지만 nameofcat유형 구문을 사용하는 파이썬 명령 줄 응용 프로그램이 있습니다. 총 17 개의 aplhabets가 포함 된 단어를 스크립트에 대한 인수로 전달하고 하이펜이나 밑줄을 사용하지 않습니다.