在运行时从Python 3切换到Python 2

在运行时从Python 3切换到Python 2,python,python-3.x,python-2.7,os.execl,Python,Python 3.x,Python 2.7,Os.execl,我尝试检查当前版本是否为3,如果是,则切换到python2: #!/usr/bin/python import sys, os if sys.version_info[0] != 2: os.execl("/usr/bin/", "python2", *sys.argv) print(sys.version_info[:]) 但此脚本返回以下错误: Traceback (most recent call last): File "./a.py", line 6, in <

我尝试检查当前版本是否为3,如果是,则切换到python2:

#!/usr/bin/python

import sys, os

if sys.version_info[0] != 2:
    os.execl("/usr/bin/", "python2", *sys.argv)

print(sys.version_info[:])
但此脚本返回以下错误:

Traceback (most recent call last):
  File "./a.py", line 6, in <module>
    os.execl("/usr/bin/", "python2", *sys.argv)
  File "/usr/lib/python3.3/os.py", line 531, in execl
    execv(file, args)
PermissionError: [Errno 13] Permission denied
回溯(最近一次呼叫最后一次):
文件“/a.py”,第6行,在
execl(“/usr/bin/”、“python2”、*sys.argv)
execl中的文件“/usr/lib/python3.3/os.py”,第531行
execv(文件,参数)
PermissionError:[Errno 13]权限被拒绝

我错过了什么?

我认为您尝试的是一个坏主意-这是令人惊讶的行为,不需要,相反,只需使用显式hashbang:

#!/usr/bin/python2
或者,优选地:

#!/usr/bin/env python2
根据,任何unix系统都应该提供
python2

execl(“/usr/bin/”、“python2”、*sys.argv)

/usr/bin/是一个目录,您无法运行它。尝试:

execl(“/usr/bin/python2”、“/usr/bin/python2”、*sys.argv[1:])


以管理员身份运行此脚本,可能会有所帮助..不。而且它将来也不会有根特权。好吧,这就是重点-python在OSX中没有python2符号链接。@ciembor那么我建议联系该软件包的维护人员,并建议他们修复该漏洞。PEP非常清楚——“类Unix软件发行版(包括Mac OS X和Cygwin等系统)应该在安装Python 2解释器版本时将python2命令安装到默认路径中,python3和python3解释器也是如此。”。