2008-10-13 37 views
24

Cách đơn giản nhất có thể, phân biệt giữa Windows XP và Windows Vista, sử dụng Python và pywin32 hoặc wxPython?Làm thế nào để kiểm tra xem hệ điều hành là Vista bằng Python?

Về cơ bản, tôi cần một chức năng gọi là sẽ trở lại Đúng iff OS hiện nay là Vista:

>>> isWindowsVista() 
True 
+0

lưu ý rằng nếu bạn là cửa sổ duy nhất quan tâm đến vs linux vv bạn có thể sử dụng ' nếu os.name == "nt": ' –

Trả lời

40

Python có mô-đun 'nền tảng' đáng yêu để giúp bạn.

>>> import platform 
>>> platform.win32_ver() 
('XP', '5.1.2600', 'SP2', 'Multiprocessor Free') 
>>> platform.system() 
'Windows' 
>>> platform.version() 
'5.1.2600' 
>>> platform.release() 
'XP' 

LƯU Ý: Như đã đề cập trong các nhận xét, giá trị thích hợp có thể không được trả lại khi sử dụng phiên bản cũ của python.

+1

Python 2.5.2 nói ('', '', '', '') đối với platform.win32_ver() trong Vista, nhưng Python 2.6 trả lời đúng 'Vista'. Cảm ơn! – DzinX

+0

tốt nhất và rõ ràng. Xin lưu ý rằng chương trình của bạn có thể không hoạt động ngay hôm nay kể từ khi win7 được phát hành và nó cũng là 6.1 –

+0

Như đã chỉ ra, điều này sẽ không hoạt động nếu bạn chạy các phiên bản cũ hơn của Python trên Windows 7. Python 2.5.4 trả về sau trên Windows 7: ' platform.release() => 'Vista'', 'platform.win32_ver() => (' ',' 6.1.7600 ',' ',' Đa xử lý miễn phí ')'. Không ngạc nhiên khi biết rằng 2.5 là cũ, nhưng một cái gì đó để nhận thức được. – sam

8

Giải pháp đơn giản nhất tôi thấy là cái này:

import sys 

def isWindowsVista(): 
    '''Return True iff current OS is Windows Vista.''' 
    if sys.platform != "win32": 
     return False 
    import win32api 
    VER_NT_WORKSTATION = 1 
    version = win32api.GetVersionEx(1) 
    if not version or len(version) < 9: 
     return False 
    return ((version[0] == 6) and 
      (version[1] == 0) and 
      (version[8] == VER_NT_WORKSTATION)) 
+0

Như với tất cả các chức năng trong win32api, lấy nó trực tiếp từ miệng của con ngựa - http://msdn.microsoft.com/en-us/library/ms724833 (VS.85). aspx Các tuple trả về bản đồ khoảng các lĩnh vực của OSVERSIONSINFOEX –

+2

Điều này là sai quá. Nó sẽ trả về true cho Windows 7 và có thể là bất cứ thứ gì xuất hiện sau Windows 7. Vista có phiên bản 6.0, Windows 7 có phiên bản 6.1. Thực sự mọi người, nó không phải là khó để có được quyền! –

+0

@David Heffernan: Kiểm tra dấu thời gian của bài đăng, đây là WAY trước khi Windows 7 xuất hiện :) nhưng cảm ơn vì đã chỉ ra điều này. Tôi cập nhật mã để kiểm tra số phiên bản nhỏ, tôi nghĩ rằng nó sẽ đủ thời gian này. – DzinX

8

Các giải pháp được sử dụng trong Twisted, không cần pywin32:

def isVista(): 
    if getattr(sys, "getwindowsversion", None) is not None: 
     return sys.getwindowsversion()[0] == 6 
    else: 
     return False 

Lưu ý rằng nó cũng sẽ khớp với Windows Server 2008

+0

Cảm ơn! Tôi không nhớ bằng cách sử dụng pywin32 hoặc wxPython (tôi đã nhập chúng anyway), nhưng tôi muốn chắc chắn rằng hệ điều hành là Vista. Tôi không biết nhiều về Server 2008 vì vậy tôi sẽ không muốn mã cụ thể của Vista chạy trên đó. – DzinX

+2

Tôi không hiểu số phiếu bầu. Windows 7 cũng có phiên bản lớn bằng 6. Nếu ý định có nghĩa là isVistaOrLater thì mã nên nói> = 6. Vì vậy, tuy nhiên bạn giải thích điều này, nó sai. –

+0

@DavidHeffernan Câu trả lời này đã được đưa ra một năm trước khi Windows7 được phát hành. –

0
import platform 
if platform.release() == "Vista": 
    # Do something. 

hoặc

import platform 
if "Vista" in platform.release(): 
    # Do something. 
Các vấn đề liên quan