호출자가 명령줄에 인터프리터를 제공했는지 확인하거나 사용할 인터프리터를 결정하기 위해 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
.