2009-08-25 43 views
131

tôi thấy các module nền tảng nhưng nó nói nó sẽ trả về 'Windows' và nó trở về 'Microsoft' trên máy tính của tôi. Tôi nhận thấy trong một thread ở đây trên stackoverflow nó trả về 'Vista' đôi khi.Làm thế nào để kiểm tra xem tôi đang chạy trên Windows bằng Python?

Vì vậy, câu hỏi là, làm thế nào để implemement?

if isWindows(): 
    ... 

Theo cách tương thích về phía trước? Nếu tôi phải kiểm tra những thứ như 'Vista' thì nó sẽ phá vỡ khi phiên bản cửa sổ tiếp theo xuất hiện.


Lưu ý: Câu trả lời cho rằng đây là câu hỏi trùng lặp không thực sự trả lời câu hỏi isWindows. Họ trả lời câu hỏi "nền tảng nào". Vì nhiều hương vị của cửa sổ tồn tại không ai trong số họ một cách toàn diện mô tả làm thế nào để có được một câu trả lời của isWindows.

+0

Tương tự như http: // stackoverflow .com/questions/196930/how-to-check-if-os-là-vista-in-python – monkut

+3

"Nên có một-- và tốt nhất là chỉ có một - cách rõ ràng để làm điều đó." Than ôi, python cho chúng ta ít nhất ba cách .. –

Trả lời

175

Python os mô-đun

Cụ

os.name Tên của hoạt động hệ thống mô-đun phụ thuộc nhập khẩu. Các tên gọi sau đây hiện đã đã đăng ký: 'posix', 'nt', 'mac', 'OS2', 'ce', 'java', 'riscos'.

Trong trường hợp của bạn, bạn muốn kiểm tra cho 'nt' như os.name đầu ra:

import os 

if os.name == 'nt': 
    ... 
+30

'nt' là giá trị cho các cửa sổ – shuckc

+0

Linux thường trở lại là gì? posix? –

+1

@AndiJay - có, nhưng phải đủ dễ dàng để kiểm tra! –

39

Bạn sẽ có thể dựa vào os .name.

import os 
if os.name == 'nt': 
    # ... 

chỉnh sửa: Bây giờ tôi muốn nói một cách rõ ràng nhất để làm điều này là thông qua các mô-đun platform, theo câu trả lời khác.

18

trong sys quá:

import sys 
# its win32, maybe there is win64 too? 
is_windows = sys.platform.startswith('win') 
+1

Tôi đang sử dụng Windows 64 bit và điều này mang lại cho tôi 'win32' :) – Hut8

38

Bạn có sử dụng platform.system?

 
system() 
     Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'. 

     An empty string is returned if the value cannot be determined. 

Nếu điều đó không hoạt động, có thể thử platform.win32_ver và nếu nó không tăng ngoại lệ, bạn đang sử dụng Windows; nhưng tôi không biết nếu đó là tương thích về phía trước để 64-bit, vì nó có 32 trong tên.

 
win32_ver(release='', version='', csd='', ptype='') 
     Get additional version information from the Windows Registry 
     and return a tuple (version,csd,ptype) referring to version 
     number, CSD level and OS type (multi/single 
     processor). 

Nhưng os.name có lẽ là cách để đi, như những người khác đã đề cập.


Đối với những gì nó có giá trị, đây là một vài trong số những cách họ kiểm tra cho Windows trong platform.py:

if sys.platform == 'win32': 
#--------- 
if os.environ.get('OS','') == 'Windows_NT': 
#--------- 
try: import win32api 
#--------- 
# Emulation using _winreg (added in Python 2.0) and 
# sys.getwindowsversion() (added in Python 2.3) 
import _winreg 
GetVersionEx = sys.getwindowsversion 
#---------- 
def system(): 

    """ Returns the system/OS name, e.g. 'Linux', 'Windows' or 'Java'.  
     An empty string is returned if the value cannot be determined. 
    """ 
    return uname()[0] 
+0

Trên máy tính 64 bit, với Windows 7 (hệ điều hành 64 bit), đây là đầu ra: Python 3.1.1 (r311: 74483, ngày 17 tháng 8 2009, 16:45:59) [MSC v.1500 64 bit (AMD64)] trên win32 >>> print (sys.platform) win32 >>> platform.win32_ver() ('post2008Server', '6.1 .7100 ',' ',' Đa xử lý miễn phí ') Lưu ý rằng việc xây dựng gọi nó là win32 một cách rõ ràng. – Francesco

+0

Rất tiếc, tôi nghĩ rằng đầu ra sẽ được định dạng tốt hơn. hy vọng bạn vẫn có thể đọc nó. – Francesco

6
import platform 
is_windows = any(platform.win32_ver()) 

hoặc

import sys 
is_windows = hasattr(sys, 'getwindowsversion') 
Các vấn đề liên quan