9


まず第一に、この質問はPythonでの64ビットOS(Windows)の検出と重複しているとは思いません。これは、
完全に回答されていないためです。

唯一の近づいてくる答えは次のとおりです。

sys.getwindowsversion()PROGRAMFILES(X86)の使用または存在( if 'PROGRAMFILES(X86)' in os.environ

だが:

  • Windows環境変数はPROGRAMFILES(X86)信頼できますか?システムに存在していなくても、誰でも作成できるのではないかと心配しています。
  • sys.getwindowsversion()アーキテクチャを取得するためにどのように使用しますか?

についてsys.getwindowsversion()
リンクhttp://docs.python.org/library/sys.html#sys.getwindowsversion
からhttp://msdn.microsoft.com/en-us/library/ms724451%28VS.85%29にアクセスできます。 aspx
ですが、アーキテクチャ(32ビット/ 64ビット)に関連するものは何も表示されません。
さらに、返されたタプルのプラットフォーム要素はアーキテクチャから独立しているようです。

最後の注意:Python2.5とWindowsXP以降のWindowsバージョンの両方を使用したソリューションを探しています

ありがとう!

編集:
関連情報はここ
http://msdn.microsoft.com/en-us/library/ms724340%28v=VS.85%29.aspx
で入手できます が、Pythonでこれを取得するにはどうすればよいですか?

Edit2:64ビットウィンドウで、32ビットPythonインタープリターを使用:

  • os.environ["PROCESSOR_ARCHITECTURE"]は
    • 'x86'
  • platform.architecture()は
    • (「32ビット」、「WindowsPE」)
4

5 に答える 5

24

プラットフォームモジュールは、この情報を取得するための本当に最良の方法だと思います。

  >>> import platform
  >>> platform.platform()
  'Windows-7-6.1.7601-SP1'
  platform.processor()
  'Intel64 Family 6 Model 42 Stepping 7, GenuineIntel'

ここから32/64ビットウィンドウで確実な答えを得る場所がわからないので、これを提案します:

  try:
      os.environ["PROGRAMFILES(X86)"]
      bits = 64
  except:
      bits = 32
  print "Win{0}".format(bits)

または、実行しているPythonのフレーバーを知る必要がある場合(x64Windowsでx32pythonを実行できるため):

x32 python x64 windows:
>>> platform.architecture()
('32bit', 'WindowsPE')
>>> sys.version
'2.7.2 (default, Jun 12 2011, 15:08:59) [MSC v.1500 32 bit (Intel)]'

x64 python x64 windows:
>>> platform.architecture()
('64bit', 'WindowsPE')
>>> sys.version
'2.7.2 (default, Jun 12 2011, 14:24:46) [MSC v.1500 64 bit (AMD64)]'
于 2013-05-20T20:31:11.890 に答える
6

これらの変数は、Windowsでの現在のランタイムステータスを示します。


@rem Test environment using this table:
@rem
@rem Environment Variable       32bit Native    64bit Native    WOW64
@rem PROCESSOR_ARCHITECTURE     x86             AMD64           x86
@rem PROCESSOR_ARCHITEW6432     undefined       undefined       AMD64
@rem

于 2010-05-05T05:14:38.590 に答える
2

1別のオプション(OsArchitectureのWMIをポーリング):

pywin32pythonwmiモジュールを上にインストールすると、次のことができるようになります(ただし、Windows Vista以降からのみ!)。

import wmi
c = wmi.WMI()
for os in c.Win32_OperatingSystem():
    print os.osarchitecture

2または、_winreg モジュールSOFTWARE\Wow6432Nodeを使用してunderの存在を確認することもできますHKEY_LOCAL_MACHINE(これはおそらく64ビットOSバージョンでのみ存在します)(外部依存関係はありません)。

于 2010-05-04T11:38:25.993 に答える
1

これで問題が解決することを願っています。Windows8.164ビットで試し、値AMD64を 返します。

import _winreg
def get_registry_value(key, subkey, value):

  key = getattr(_winreg, key)
  handle = _winreg.OpenKey(key, subkey )
  (value, type) = _winreg.QueryValueEx(handle, value)
  return value

windowsbit = get_registry_value(
    "HKEY_LOCAL_MACHINE",
    "SYSTEM\\CurrentControlSet\Control\\Session Manager\\Environment",
    "PROCESSOR_ARCHITECTURE")
print windowsbit

64ビットWindowsマシンで作業している場合は、このコードを実行するだけで、AMD64が出力されます。

または、32ビットで作業している場合は、AMD32が出力されます

このコードがこの問題を完全に解決するのに役立つことを願っています

于 2014-05-22T23:04:17.660 に答える
0

これが素晴らしいPythonコマンドのワンライナーです。

>python -c "import platform as p; print(p.platform());print(p.processor())"
Windows-10-10.0.17134-SP0
Intel64 Family 6 Model 61 Stepping 4, GenuineIntel

>
于 2018-05-30T17:20:39.567 に答える