假设我有一个名为a_python2_script.py
且内容为
print "Hello"
并在Python 3中使用:
调用它from subprocess import Popen
Popen(["python2", "a_python2_script.py"])
这很有效,但我不想硬编码python2
解释器调用,因为该程序应该在Windows和Linux上运行。
我知道sys.executable
,但这会给我当前(即Python 3)解释器的路径。从Python 3脚本中获取Python 2解释器路径的pythonic方法是什么?
注意:我正在调用外部Python 2库,没有机会将其转换为Python 3。
答案 0 :(得分:0)
这可能是一种可能的解决方法。我目前正在运行Windows,并使用Anaconda和Anaconda3安装了Python。我的PATH
包含这两个文件夹。
一个简单的脚本可以检查每个PATH
位置是否存在Python可执行文件。然后,您可以在每个位置执行python --version
:
import sys, os
from subprocess import Popen
python_paths = []
for path in os.environ["PATH"].split(os.pathsep):
for executable in ["python", "python.exe", "python2"]:
if os.path.isfile(os.path.join(path, executable)):
python_paths.append(path)
for path in python_paths:
Popen([os.path.join(path, "python"), "--version"])
print(python_paths)
在我的Windows机器上,这给出了:
['d:\\Anaconda', 'd:\\Anaconda3']
Python 2.7.9 :: Anaconda 2.2.0 (32-bit)
Python 3.4.3 :: Anaconda 2.3.0 (32-bit)
使用Python 3.4.3进行测试。我目前无法检查Linux的结果。
答案 1 :(得分:0)
使用os.get_exec_path()
(3.2中提供)获取将搜索可执行文件的目录列表。
In [1]: import os
In [2]: paths = os.get_exec_path()
In [5]: for p in paths:
...: for prog in ["python2", "python2.exe"]:
...: attempt = os.path.join(p, prog)
...: if os.path.isfile(attempt):
...: print(attempt)
...:
/usr/local/bin/python2