Python Windows x64 vs x86:硬件vs.操作系统vs.进程

Python Windows x64 vs x86:硬件vs.操作系统vs.进程,python,python-3.x,windows,64-bit,x86-64,Python,Python 3.x,Windows,64 Bit,X86 64,在Windows上,基于Python3中的x86和x64,我遇到了一些问题 我需要知道我的Python程序是否正在运行: 在x64与x86硬件上 在x64与x86操作系统上 在x64与x86流程中 它们根本不是一回事 AMD64体系结构处理器可以运行64位或32位操作系统 64位操作系统可以运行64位或32位进程 我知道: Python的platform.architecture() 它代表什么?(文档中似乎没有说明。) 如果(sys.maxsize>2**32)则我处于64位进程中。好的

在Windows上,基于Python3中的x86和x64,我遇到了一些问题

我需要知道我的Python程序是否正在运行:

  • 在x64与x86硬件上
  • 在x64与x86操作系统上
  • 在x64与x86流程中
它们根本不是一回事

AMD64体系结构处理器可以运行64位或32位操作系统

64位操作系统可以运行64位或32位进程

我知道:

  • Python的
    platform.architecture()
    它代表什么?(文档中似乎没有说明。)
  • 如果
    (sys.maxsize>2**32)
    则我处于64位进程中。好的但如果我是在32位进程中,我怎么知道我是在64位还是32位操作系统上
为了避免不可避免的“你为什么在意?”问题,这是因为我的Python程序正在自动配置Windows—在x86和x64 Windows上情况不同,但我事先不知道我的程序是在32位还是64位Python上运行


所以我需要弄清楚这一点。

所以你真正的问题是你正在运行的Windows是否是x64?:)

然后呢,怎么样

import os
arch = (
    os.environ.get("PROCESSOR_ARCHITEW6432") or 
    os.environ.get("PROCESSOR_ARCHITECTURE")
)
# `arch` should now reliably be `x64` if the system is 64-bit.


我相信这会起作用,但我还没有在32位版本的Windows上进行测试:

import sys, os
x64_process = (sys.maxsize > 2**32)
x64_os = os.environ.get('ProgramW6432') is not None
可能是我最重要的用例-在注册表更改后重新启动explorer.exe:

def restartExplorer():
    '''Restart explorer'''
    do(r'taskkill /f /im explorer.exe')
    if x64_os and not x64_process:
        do(os.environ['systemroot']+ r'\sysnative\cmd.exe /c start /B explorer.exe') # because this Python is in a 32 bit process
    else:
        do("start explorer.exe")

我不会给您介绍
do()
的实现,因为这很明显。(但如果有人问起,就会问。)

事情并不在不同的地方,或者更确切地说,操作系统隐藏了差异。您不应该试图直接访问
WoW64
程序文件x(x86)
文件夹。应用程序数据不应该存储在
程序文件中
无论如何,这就是
程序数据
的用途。那么,你为什么要在意呢?您正在尝试执行什么样的配置自动化,为什么操作系统比特度很重要?可能有更合适的方法来做任何你想做的事情,那就是不要试图绕过OSBTW如果你在x64处理器上运行32位版本的Windows,你仍然在32位版本的Windows上运行。文件夹不会更改。因此,实际的处理器架构应该无关紧要。因为人们在问-(1)我需要知道是否安装x64或x86版本的应用程序(一些应用程序基于此有不同的install.exe),以及(2)只有在64位操作系统上处于32位进程时,我才需要运行64位版本的cmd.exe和nbtstat.exe,(3)如果在32位操作系统上运行“SetACL32”,那么在64位操作系统上运行“SetACL”。微软试图掩盖差异的做法在大多数情况下都能奏效,但这并不是因为它。(我希望不是这样。)1)所有安装程序都已经支持打包多个目标并部署适当的目标。
setup.exe
通常只是启动相应安装程序的引导程序。对于2)没有需要调用的单独版本。除非您明确尝试使用绝对路径运行可执行文件。3) SetACL是第三方产品。您不需要它来设置权限。内置命令是
cacls
OP的问题可能是试图直接写入WoW64或
程序文件(x86)
文件夹。这是一个非常糟糕的想法,因为操作系统努力隐藏架构差异。如果Python代码以32位运行,那么在彻底测试之前,它将看到Wow64文件夹。它不起作用。如果在64位Windows上的32位进程中运行此操作,则处理器体系结构6432为“AMD64”,处理器体系结构为“x86”。因此,这实际上是测试64位进程,而不是操作系统。是的,但您不能在x32操作系统上运行x64进程。我想@nerdfever.com想知道系统是否可以运行64位可执行文件,而不是当前的Python解释器是作为32位还是64位进程运行。e、 g.便携式安装程序可能以32位运行,因此即使系统只有32位,它也可以工作并选择要安装的内容。或者其他一些用例。@AKX,但您可以在64位操作系统中运行32位进程。