如何使Shebang能够在python3和python3.5之间选择正确的Python解释器

Joa*_*ban 6 python bash shell shebang python-3.x

我正在python3中开发一组脚本,因为我使用了以下命令:

#!/usr/bin/env python3
Run Code Online (Sandbox Code Playgroud)

一切正常,但是在执行了某些虚拟机的情况下,解释器的名称为python3.5。我希望能够在两个环境中都执行我的脚本,但是我不能更改虚拟机的文件系统(所以我放弃了诸如使从python3.5到python3的链接之类的解决方案)

我看着的人,env但找不到任何指定搜索模式或类似方式的方法。

我尝试alias在会话开始时设置一个指向正确的python解释器的设置,但env不使用它。

我独特的解决方案是调用我的脚本,说必须使用哪个解释器,但非常麻烦:

python3.5 myscript.py
Run Code Online (Sandbox Code Playgroud)

任何想法都欢迎!,谢谢!

n. *_* m. 8

无需引入单独的shell和python脚本,单个文件可以同时使用!

用以下顺序替换您的shebang行:

#!/bin/sh

# Shell commands follow
# Next line is bilingual: it starts a comment in Python, and is a no-op in shell
""":"

# Find a suitable python interpreter (adapt for your specific needs) 
for cmd in python3.5 python3 /opt/myspecialpython/bin/python3.5.99 ; do
   command -v > /dev/null $cmd && exec $cmd $0 "$@"
done

echo "OMG Python not found, exiting!!!!!11!!eleven" >2

exit 2

":"""
# Previous line is bilingual: it ends a comment in Python, and is a no-op in shell
# Shell commands end here
# Python script follows (example commands shown)

import sys
print ("running Python!")
print (sys.argv)
Run Code Online (Sandbox Code Playgroud)

  • 非常感谢!,正是我要找的。而且我必须承认这是一种非常巧妙的解决方法,再次感谢我学到的东西! (3认同)