【发布时间】:2020-03-05 17:44:58
【问题描述】:
我在 Windows 上基于 x86 与 x64 的 Python 3 中遇到问题。
我需要知道我的 Python 程序是否正在运行:
- 在 x64 与 x86 硬件上
- 在 x64 与 x86 操作系统上
- 在 x64 与 x86 进程中
它们不是一回事(根本!)。
AMD64 架构处理器可以运行 64 位或 32 位操作系统。
64 位操作系统可以运行 64 位或 32 位进程。
我知道:
- Python 的
platform.architecture()返回一个字符串 - 但是这 3 个中的哪一个 它代表吗? (文档似乎没有说。) - 如果
(sys.maxsize > 2**32)则我处于 64 位进程中。美好的;但是如果我在 32 位进程中,我如何判断我是在 64 位还是 32 位操作系统上?
为了避免不可避免的“你为什么在乎?”问题,这是因为我的 Python 程序正在自动配置 Windows - x86 和 x64 Windows 上的东西在不同的地方,但我事先不知道我的程序是在 32 位还是 64 位 Python 上运行。
所以我需要弄清楚。
【问题讨论】:
-
事物在不同的地方不是,或者更确切地说,操作系统隐藏了差异。您不应该尝试直接访问
WoW64或Program Filex (x86)文件夹。无论如何,应用程序数据不应该存储在Program Files中,这就是ProgramData的用途。 -
那么,你为什么在乎呢?您正在尝试执行哪种配置自动化,为什么操作系统位数很重要?可能有更合适的方法来做任何你想做的事,不要试图绕过操作系统
-
顺便说一句,如果您在 x64 处理器上运行 32 位版本的 Windows,您仍然可以在 32 位版本的 Windows 上运行。文件夹不会改变。所以实际的处理器架构应该无关紧要。
-
既然人们在问 - (1) 我需要知道是安装 x64 还是 x86 版本的应用程序(某些应用程序有不同的安装 .EXE 基于此),并且 (2) 只有当我' m 在 64 位操作系统上的 32 位进程中,我需要运行 cmd.exe 和 nbtstat.exe 的 64 位版本,(3) 如果在 32 位操作系统上我运行“SetACL32”,但在 64 位操作系统上我运行“SetACL”。微软试图隐藏差异的工作大部分时间都能找到——但不是为了这些东西。 (我希望不是这样。)
-
1) 所有安装程序都已经支持打包多个目标并部署适当的目标。
setup.exe通常只是一个启动适当安装程序的引导程序。对于 2),您不需要调用单独的版本。除非您明确尝试使用绝对路径运行可执行文件。 3) SetACL 是第三方产品。您不需要它来设置权限。内置命令为cacls
标签: python python-3.x windows 64-bit x86-64