내 Python 스크립트가 명령줄 해석기를 통해 호출되었는지 아니면 실행 파일(shebang을 통해)로 호출되었는지 어떻게 알 수 있나요?

내 Python 스크립트가 명령줄 해석기를 통해 호출되었는지 아니면 실행 파일(shebang을 통해)로 호출되었는지 어떻게 알 수 있나요?

호출자가 명령줄에 인터프리터를 제공했는지 확인하거나 사용할 인터프리터를 결정하기 위해 shebang 라인을 사용하는 방법이 Python 스크립트에 있습니까?

간단한 예로 myscript.py(실행 권한 포함)는 다음과 같습니다.

#!/bin/env python
import sys
print sys.argv

이 스크립트가 호출되는지 알고 싶습니다.

$ python myscript.py

또는

$ ./myscript.py

두 경우 모두 sys.argv[0]은 "myscript.py"입니다.

답변1

이는 shebang 라인을 통해 (간접적으로) 설정된 환경 변수를 사용하여 달성할 수 있습니다.

이론적으로는 동일한 변수가 셸에 설정될 수 있지만 감지 메커니즘을 명시적으로 속이려는 경우가 아니면 괜찮습니다.

불행하게도, shebang 라인은 두 개의 매개변수로 제한되어 있는데, 이는 충분하지 않습니다(적어도 저는 그런 해결책을 모릅니다). 따라서 도우미 스크립트가 필요합니다. 다행스럽게도 Linux 커널에서는 shebang 인터프리터가 바이너리일 것을 요구하지 않습니다.

/usr/local/bin/shebang-bash.sh

#! /bin/bash
via_shebang=1 bash "$1"

그런 다음 해당 스크립트를 shebang 해석기로 사용합니다.

#! /usr/local/bin/shebang-bash.sh

스크립트에서 의 값/존재를 확인하면 됩니다 $via_shebang.

관련 정보