调用 Python 脚本作为子进程
Invoking Python Script as Subprocess
我正在围绕一些 python 脚本创建一个包装器,当计算机上安装了多个版本的 python 时,运行 遇到了一个小问题。例如,在我的 Mac 上,python 2.7 可通过 "python" 在命令行访问,python 3.4 可用 "python3"。无论如何确定当前 python 实例是如何启动的,以便我可以确定子进程将使用正确的版本?
import subprocess
def main():
pythonCommand = determineCommand() #What is python install as on this computer
argArray = [pythonCommand, "test.py"] #requires python 3.4
subprocess.call(argArray)
#What I need to figure out
def determineCommand():
#If Some Check
return "python3"
#Else some other check
return "python"
#else something weird
return "python34"
#and so on
if __name__ == "__main__":
main()
以上代码在我的电脑上无法正常执行,但在只安装了 python 3.4 的电脑上运行正常。将 argArray 更改为使用 python3 可以在我的计算机上运行,但在其他计算机上会损坏。
正在执行的 Python 的版本可以通过 sys.version_info
:
检查
chuck@computer:~$ python
>>> import sys; sys.version_info
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)
>>> exit()
chuck@computer:~$ python3
>>> import sys; sys.version_info
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
>>>
version_info
属性在所有 Python 版本 >= 2.0 中可用。
如果您需要某个版本,可以在您的模块中添加一个检查:
import sys
v = sys.version_info
if sys.version_info.major < 3:
raise Exception("Incompatible Python version: %d.%d" % (v.major, v.minor))
要获取用于启动当前 Python 解释器的可执行文件,请阅读 sys.executable
。它是当前 运行 Python 解释器二进制文件的绝对路径(尽管在奇怪的情况下它可以是空字符串或 None
,例如冻结的可执行文件等)。
我正在围绕一些 python 脚本创建一个包装器,当计算机上安装了多个版本的 python 时,运行 遇到了一个小问题。例如,在我的 Mac 上,python 2.7 可通过 "python" 在命令行访问,python 3.4 可用 "python3"。无论如何确定当前 python 实例是如何启动的,以便我可以确定子进程将使用正确的版本?
import subprocess
def main():
pythonCommand = determineCommand() #What is python install as on this computer
argArray = [pythonCommand, "test.py"] #requires python 3.4
subprocess.call(argArray)
#What I need to figure out
def determineCommand():
#If Some Check
return "python3"
#Else some other check
return "python"
#else something weird
return "python34"
#and so on
if __name__ == "__main__":
main()
以上代码在我的电脑上无法正常执行,但在只安装了 python 3.4 的电脑上运行正常。将 argArray 更改为使用 python3 可以在我的计算机上运行,但在其他计算机上会损坏。
正在执行的 Python 的版本可以通过 sys.version_info
:
chuck@computer:~$ python
>>> import sys; sys.version_info
sys.version_info(major=2, minor=7, micro=10, releaselevel='final', serial=0)
>>> exit()
chuck@computer:~$ python3
>>> import sys; sys.version_info
sys.version_info(major=3, minor=4, micro=3, releaselevel='final', serial=0)
>>>
version_info
属性在所有 Python 版本 >= 2.0 中可用。
如果您需要某个版本,可以在您的模块中添加一个检查:
import sys
v = sys.version_info
if sys.version_info.major < 3:
raise Exception("Incompatible Python version: %d.%d" % (v.major, v.minor))
要获取用于启动当前 Python 解释器的可执行文件,请阅读 sys.executable
。它是当前 运行 Python 解释器二进制文件的绝对路径(尽管在奇怪的情况下它可以是空字符串或 None
,例如冻结的可执行文件等)。