簡體   English   中英

Windows x64 vs x86:硬件 vs. 操作系統 vs. 進程

[英]Windows x64 vs x86: Hardware vs. OS vs. process

我在 Windows 上的 Python 3 中遇到基於 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()的實現,因為它很明顯。 (但如果有人問的話。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM