/usr/bin/python Skript mit anderer Version auf macOS ausführen

/usr/bin/python Skript mit anderer Version auf macOS ausführen

Ich verwende macOS High Sierra und habe dieses merkwürdige Verhalten des Systems Python festgestellt.

Es handelt sich dabei also /usr/bin/xattrum ein Python-Skript, das sofort eine Fehlermeldung ausgibt und beendet wird; und /usr/bin/xattr-2.7es ist das Skript, das die eigentliche Xattr-Arbeit erledigt.

/usr/bin/xattrWenn ich oder xattroder ausführe /usr/bin/python /usr/bin/xattr, werden sie alle /usr/bin/xattr-2.7anstelle von ausgeführt /usr/bin/xattr. Beachten Sie, dass es keine Möglichkeit gibt, /usr/bin/xattrdie Steuerung auf umzuleiten /usr/bin/xattr-2.7. Es wird sofort eine Fehlermeldung ausgegeben.

Wenn ich aber das Verzeichnis ändere /usr/binund ausführe /usr/bin/python ./xattroder einfach nur ./xattr, wird die echte Version ausgeführt /usr/bin/xattrund die Fehlermeldung gedruckt.

Ich frage mich also, welche Magie hier im Spiel ist. Es scheint, als ob das vorinstallierte Python in der Lage ist, dem Skript eine Versionsnummer anzuhängen, bevor es die von mir angegebene ausführt.

Nachverfolgen:

Das Ausführen von Python von verschiedenen Standorten aus führt auch zu unterschiedlichem Verhalten

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.

Ich habe beide Dateien hier angehängt (https://gist.github.com/hotpxl/f16be705ac8b0cc6b7fbfe951cb68c7b)

Antwort1

Unter MacOS /usr/bin/pythongibt es keinen Python-Interpreter, sondern ein Programm namens „Versioner“, das versucht, die zu verwendende Version des Python-Interpreters auszuwählen.

Es führt auch Tricks aus, wie z. B. die Suche nach einem Skript mit einem Python-Versionssuffix beim Ausführen von Skripten von speziellen Speicherorten wie z . B. /usr/bin.

Dies ist teilweise dokumentiert in derManpage für Python unter MacOS, obwohl dort keine genauen Details zur Suche nach Skripts mit dem Suffix erwähnt werden.

Siehe auchdieser Blog-BeitragDarin wird genau das gleiche Problem untersucht, das Sie haben, und es enthält eine ausführlichere Erklärung, einschließlich der Überprüfung der Binärdatei „Versioner“ auf der Suche nach speziellen Zeichenfolgen.

verwandte Informationen