【问题标题】:Switching from Python 3 to 2 in a runtime在运行时从 Python 3 切换到 2
【发布时间】:2013-01-05 13:28:37
【问题描述】:

我尝试检查当前版本是否为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

我错过了什么?

【问题讨论】:

  • 以管理员身份运行此脚本,可能会有所帮助..
  • 不。而且以后不会有root权限。

标签: python python-3.x python-2.7 os.execl


【解决方案1】:

os.execl("/usr/bin/", "python2", *sys.argv)

/usr/bin/ 是一个目录,你不能运行它。试试:

os.execl("/usr/bin/python2", "/usr/bin/python2", *sys.argv[1:])

【讨论】:

    【解决方案2】:

    我认为你正在尝试的是一个坏主意 - 这是令人惊讶的行为并且不需要,相反,只需使用明确的 hashbang:

    #!/usr/bin/python2
    

    或者,最好是:

    #!/usr/bin/env python2
    

    根据PEP 394,任何unix系统都应该提供python2

    【讨论】:

    • 好吧,这就是重点——python 在 OSX 中没有 python2 符号链接。
    • @ciembor 然后我建议联系该软件包的维护者并建议他们修复该错误。 PEP 非常清楚 - “类 Unix 软件发行版(包括 Mac OS X 和 Cygwin 等系统)应在安装 Python 2 解释器版本时将 python2 命令安装到默认路径中,对于 python3 也是如此和 Python 3 解释器。”.
    猜你喜欢
    • 2020-12-28
    • 1970-01-01
    • 2015-11-11
    • 1970-01-01
    • 2019-03-17
    • 2011-10-13
    • 2012-10-17
    • 2016-07-09
    • 2013-09-02
    相关资源
    最近更新 更多