在执行中期从64位python.exe切换到32位

时间:2015-06-08 18:39:52

标签: python python-3.x anaconda

我有2个单独的python.exe,一个是64位,一个是32位。 64位是默认值。如何使用subprocesssys(或任何相关软件包)在执行中期间将控制权从64位切换到32位,仅对32位执行代码,然后将控制权切换回64位版本?换句话说,我正在寻找类似......的东西。

if struct.calcsize("P")==8: # check if 64 bit version
   # switch to 32 bit version 
   # ??? new_shell = subprocess.Popen(location of 32 bit python.exe)??? what would go here
   # pass a bunch of commands and then switch control back
   # to the 64 bit version

另外,我正在使用anaconda,所以我想第一次调用将是切换到32位python.exe环境?在32位进程中,需要导入一些包,最后返回数据。

1 个答案:

答案 0 :(得分:1)

32位和64位模式之间的中间执行通常是不可能的。要解决此问题,请考虑将工作流划分为多个脚本,并在需要时同时使用32位和64位版本的脚本:

  1. 使用一个脚本(即通过ODBC连接)检索数据 输出到flatfile(txt,csv);
  2. 使用一个脚本导入flatfile和进程数据并导出到已处理的flatfile;
  3. 使用其他脚本返回已处理的数据(即,SQL附加到ODBC中 数据库)。
  4. 此外,因为Python的两个版本都不能#34;谈话"对于彼此,您将需要运行双重,单独的脚本,这些脚本根据操作系统类型(32位与64位)有条件地调用。参数可以通过子进程传递:

    #!/usr/bin/python
    import struct, subprocess
    
    if struct.calcsize("P") * 8 == 32:
        subprocess.call(['C:\pathTo\32bit\python.exe', 'C:\pathTo\32bit\python\32bitscript.py', 'arg1', 'arg2'])
    else:
        subprocess.call(['C:\pathTo\64bit\python.exe', 'C:\pathTo\64bit\python\64bitscript.py', 'arg1', 'arg2'])
    

    环境路径变量或默认命令行路径将无用,因为它将恢复为一个python版本,而不是显式另一个。因此,需要绝对声明python.exe版本。