强制子进程使用 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
所以,我试图编写一个 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