/usr/bin/python macOS에서 다른 버전으로 스크립트를 실행 중

/usr/bin/python macOS에서 다른 버전으로 스크립트를 실행 중

저는 macOS High Sierra를 실행하고 있는데 Python 시스템의 기발한 동작을 발견했습니다.

/usr/bin/xattr오류 메시지를 즉시 인쇄하고 종료하는 Python 스크립트도 마찬가지 입니다. /usr/bin/xattr-2.7실제 xattr 작업을 수행하는 것입니다 .

/usr/bin/xattr또는 xattr또는 을 실행하면 모두 대신 /usr/bin/python /usr/bin/xattr실행됩니다 . 제어권을 로 리디렉션할 수 있는 방법은 없습니다 . 즉시 오류 메시지를 인쇄합니다./usr/bin/xattr-2.7/usr/bin/xattr/usr/bin/xattr/usr/bin/xattr-2.7

그러나 디렉토리를 으로 변경 /usr/bin하고 실행 /usr/bin/python ./xattr하거나 그냥 실행하면 ./xattr실제 실행되고 /usr/bin/xattr오류 메시지가 인쇄됩니다.

그래서 여기에는 어떤 마법이 관련되어 있는지 궁금합니다. 사전 설치된 Python이 내가 지정한 것을 실행하기 전에 스크립트에 버전 번호를 추가할 수 있는 것처럼 느껴집니다.

후속 조치:

다른 위치에서 Python을 실행하면 동작도 달라집니다.

bash-3.2$ cd /usr/bin
bash-3.2$ ./python /usr/bin/xattr
bash-3.2$ cp python /tmp
bash-3.2$ cd /tmp
bash-3.2$ ./python /usr/bin/xattr
python version 2.7.10 can't run /usr/bin/xattr.  Try the alternative(s):

/usr/bin/xattr-2.7 (uses python 2.7)

Run "man python" for more information about multiple version support in
Mac OS X.

여기에 두 파일을 모두 첨부했습니다(https://gist.github.com/hotpxl/f16be705ac8b0cc6b7fbfe951cb68c7b)

답변1

MacOS에서는 /usr/bin/pythonPython 인터프리터가 아니라 사용할 Python 인터프리터 버전을 선택하는 "versioner"라는 프로그램입니다.

또한 /usr/bin.

이는 부분적으로 문서화되어 있습니다.MacOS의 Python 매뉴얼 페이지, 접미사가 있는 스크립트를 찾는 정확한 세부 사항은 거기에 언급되어 있지 않습니다.

또한보십시오이 블로그 게시물이는 현재 겪고 있는 동일한 문제를 탐색하고 특수 문자열을 찾는 "버전 관리기" 바이너리 검사를 포함하여 더 심층적인 설명을 제공합니다.

관련 정보