在其他版本的Python中调用函数

在其他版本的Python中调用函数,python,python-2.7,cx-oracle,python-3.4,Python,Python 2.7,Cx Oracle,Python 3.4,可以从其他.py文件调用函数。但是我们能强迫Python使用另一个版本吗 问题: 我的Python版本是3.4 我需要连接到Oracle 10g数据库。不幸的是,目前还没有能够连接Python 3.4和10g的cx_Oracle版本(有一个版本,但仅适用于Oracle 11g及以上版本)。因此,我必须使用Python2.7,这样才能使用支持10g的cx_Oracle版本。在这个配置中,我在3.4上运行的代码需要进行各种修改,需要数千行代码 解决方案: 我当前的所有代码仍将在3.4上运行 当我需要

可以从其他.py文件调用函数。但是我们能强迫Python使用另一个版本吗

问题: 我的Python版本是3.4

我需要连接到Oracle 10g数据库。不幸的是,目前还没有能够连接Python 3.4和10g的cx_Oracle版本(有一个版本,但仅适用于Oracle 11g及以上版本)。因此,我必须使用Python2.7,这样才能使用支持10g的cx_Oracle版本。在这个配置中,我在3.4上运行的代码需要进行各种修改,需要数千行代码

解决方案:

  • 我当前的所有代码仍将在3.4上运行

  • 当我需要使用其他.py文件中的函数连接到数据库时,它必须在2.7上运行


  • 如何在3.4中运行Python 2.7?

    一个选项是使用
    子流程
    模块

    def callpython2(file_to_be_executed, params):
        cmd = file_to_be_executed + ' ' + ' '.join(params)
        cmd = %PYTHON2_EXE% + ' ' + cmd
    
        p = subprocess.Popen(cmd, env=cmdEnv, shell=True)
        p.communicate()
    
    然后使用文件和参数(如果有)调用此函数。将调用文件的
    \uuuuuu main\uuuu
    函数,您可以将函数放在
    \uuuuuuu main\uuu


    注意:有关如何捕获/控制结果输出或错误的详细信息,请查看子流程。

    您使用的是什么操作系统?如果是Windows,您能切换到ODBC吗?它是Windows。不幸的是,我无法改变它。如果我愿意的话,我认为最简单的是升级到Ora11g,它有cx_Oracle for 3.4的版本。您不能让两个版本的python在同一个应用程序上运行。您可以将应用降级为在2.7上运行,也可以编写一个在Python2.7上运行的服务,该服务包装您的db连接并通过rpc协议公开方法。但我认为这是一个非常糟糕的主意。您可以看看子流程:。从cx_Oracle切换到pyODBC()比升级Oracle容易得多!我在一条类似的船上,每次我尝试这个(或某个变体),当辅助脚本(3.3)尝试从主脚本(3.4)的目录加载模块时,我都会收到一个错误。我已经给出了python可执行文件的完整路径,但这还不够。我猜这是可以用“env”参数处理的,但我不知道应该设置哪些环境变量,也不知道如何获得正确的值。有什么想法吗?谢谢。我想我在这里找到了答案: