强制子进程使用 Python 3

Force subprocess to use Python 3

所以,我试图编写一个 Python 脚本,利用 subprocess 调用同一目录中的另一个 Python 脚本。这一切都很顺利,直到第二个脚本中的导入语句到达 Python 3-only 库,并且由于脚本是使用 subprocess 打开的,而后者又使用 Python 2 , 发生 ImportError

如何强制 subprocess,特别是 Popen() 使用 Python 3 打开脚本?网上好像没有这方面的建议。

编辑

虽然我总是默认使用 posting MWEs,但对于这个问题我认为这是不必要的,但无论如何我一着手 post 它,我就想到使用'python3' 而不仅仅是 'python',

stream = subprocess.Popen(['python3', 'app.py'])

现在应用程序可以运行了。奇怪的是我自己安装的Python只有一个版本(3.7),python重定向到python3,所以奇怪我不得不手动指定python3.

这是一种强制脚本 运行 和 Python3 的方法:

#! /usr/bin/python3

import sys, subprocess

if sys.version_info[:2] < (3, 0):
    # FORCE PYTHON3
    code = subprocess.check_call(['python3'] + sys.argv)
    raise SystemExit(code)

print("Using Python v%d.%d" % sys.version_info[:2])

当 运行 在 Bash 中的示例:

> python3 force_python3.py                                                                                                                         
Using Python v3.7

> python2 force_python3.py                                                                                                                         
Using Python v3.7