>source

파일에 기본 click CLI 명령이 정의되어 있다고 가정 해 보겠습니다. cli.py :

import click
@click.command()
@click.option('--test-option')
def get_inputs(test_option):
    return test_option

그런 다음 다른 모듈 스크립트 test_cli.py , 위에서 정의한 CLI를 사용하고 싶습니다.

from cli import get_inputs
print('before calling get_inputs')
print(get_inputs())
print('after calling get_inputs')

그런 다음 명령 줄에서 :

$ python test_cli.py --test-option test123
before calling get_inputs

따라서 Click 명령이 실행 된 후 전체 Python 프로세스가 완료되고 호출을 시작한 스크립트에 해당 Click 명령 이후에 평가할 문과 표현식이 있어도 실행되지 않는 것처럼 보입니다. 이것을 어떻게 달성 할 수 있습니까?

  • 답변 # 1

    실제로 Click 문서는 이것이 발생하는 이유와이 동작을 변경하는 방법에 대한 좋은 설명을 제공합니다.

    기본적으로 모든 명령은 BaseCommand , 이는 main 성공적으로 완료되면 기본적으로 종료되는 메소드 sys.exit() , 방출하는 SystemExit 예외.

    이 동작을 변경하려면 용어를 비활성화 할 수 있습니다. standalone_mode 여기에 설명 된대로.

    그래서 내 질문에 제공된 예를 들어 get_inputs() 전화하다 test_cli.py ...에서 print(get_inputs()) 으로 print(get_inputs.main(standalone_mode=False)) , 그런 다음 명령 줄에서 스크립트를 호출하면 다음과 같이 원하는 동작이 제공됩니다.

    $ python test_cli.py --test-option test123
    before calling get_inputs
    test123
    after calling get_inputs
    
    

관련 자료

  • 이전 공통 값이 둘 이상인 PHP의 배열에서 요소 삭제
  • 다음 java - true를 반환 할 때 EditText에 키보드가 표시되지 않음