作为子进程调用Python脚本

2024-10-01 04:44:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在为一些python脚本创建一个包装器,当计算机上安装了多个版本的python时,遇到了一个小问题。例如,在我的Mac上,可以通过命令行中的“python”访问Python2.7,也可以通过“python3”访问python3.4。是否有任何方法来确定当前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()

上面的代码不会在我的计算机上正确执行,但是在只安装了python3.4的计算机上它可以正常工作。将argArray更改为使用python3在我的计算机上工作,但在其他计算机上会破坏它。你知道吗


Tags: 版本脚本returnmainonmacdef计算机
2条回答

要获取用于启动当前Python解释器的可执行文件,请阅读^{}。它是当前运行的Python解释器二进制文件的绝对路径(尽管它可以是空字符串或None在奇怪的情况下,如冻结的可执行文件等)。你知道吗

可以通过sys.version_info检查正在执行的Python版本:

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))

相关问题 更多 >