【问题标题】:Execute current Python script in Python 3在 Python 3 中执行当前 Python 脚本
【发布时间】:2019-04-03 15:27:21
【问题描述】:

我有一个 python 程序,我在 Python 2 和 3 中都可以使用,它在 Python 3 中具有更多功能(使用新的 Python 3 功能)。

我的脚本当前以#!/usr/bin/env python 开头,因为这似乎是python 可执行文件最有可能的名称。但是,我想做的是“如果存在 python3,则使用它,如果不使用 python”。

我宁愿不必分发多个文件/和额外的脚本(目前我的程序是单个分布式 python 文件)。

有没有一种简单的方法可以在 python3 中运行当前脚本(如果存在)?

【问题讨论】:

  • 所以您已经在脚本内部检查了它是否由 Python 2 或 3 执行,但需要外部脚本来检查 Python 3 是否存在?
  • 我不想运行外部脚本。我(认为)我想要的是一种添加到我的脚本顶部的方法“这是 python2,但安装了 python3?如果是,请在 python3 中重新执行脚本”。
  • 所以你打算为不知道如何运行shell脚本的用户制作这个程序?如果没有,我只需将程序包装在我在下面发布的 shell 脚本中

标签: python python-3.x


【解决方案1】:

this question修改的另一种更好的方法是检查sys.version

import sys
py_ver = sys.version[0]

原始答案:可能不是最好的方法,但一种方法是针对仅存在于一个 Python 版本中的函数进行测试,以了解您正在使用什么。

try:
    raw_input
    py_ver = 2

except NameError:
    py_ver = 3

if py_ver==2:
   ... Python 2 stuff

elif py_ver==3:
   ... Python 3 stuff

【讨论】:

  • 可能需要将 raw_input 作为函数调用 (raw_input())
  • 它会返回<built-in function raw_input>,所以不,如果在 Python 2.7 上它不会失败。但是sys.version 绝对是一种更容易分辨的方式。
【解决方案2】:

尝试使用 sys 包中的 version_info

【讨论】:

    【解决方案3】:

    也许我没有完全得到你想要的。我理解:您想查看计算机上是否安装了 Python 3,如果有,请使用它。在脚本中,您可以使用 sys.version 来检查版本,正如 Idlehands 所提到的。要获取最新版本,您可能需要使用这样的小型 bash 脚本

    py_versions=($(ls /usr/bin | grep 'python[0-9]\.[0-9]$'))
    ${py_versions[-1]} your_script.py
    

    这会在ls 的输出中搜索所有python 版本并将它们存储在py_versions 中。谢天谢地,输出已经排序,所以数组中的最后一个元素将是最新版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-05
      • 2017-03-08
      • 2012-02-27
      相关资源
      最近更新 更多