2008-08-05 28 views

Trả lời

482
>>> import os 
>>> print os.name 
posix 
>>> import platform 
>>> platform.system() 
'Linux' 
>>> platform.release() 
'2.6.22-15-generic' 

Kết quả của platform.system() là như sau:

  • Linux: Linux
  • Mac: Darwin
  • Windows: Windows

Xem:

+11

Tại sao tôi nên thích 'nền tảng' hơn' sys.platform'? – matth

+5

@matth Đầu ra phù hợp hơn một chút. nghĩa là 'platform.system()' trả về '" Windows "' thay vì '" win32 "'. 'sys.platform' cũng chứa' "linux2" 'trên các phiên bản cũ của Python trong khi nó chỉ chứa' "linux" 'trên các phiên bản mới hơn. 'platform.system()' đã luôn trả về chỉ là "" Linux "'. – erb

+0

Trên mac os X, platform.system() luôn trả về "Darwin"? hoặc là có trường hợp khác có thể? –

141

Dang - lbrandy đánh tôi với cú đấm, nhưng điều đó không có nghĩa là tôi không thể cung cấp cho bạn kết quả hệ thống cho Vista!

>>> import os 
>>> os.name 
'nt' 
>>> import platform 
>>> platform.system() 
'Windows' 
>>> platform.release() 
'Vista' 

... và tôi không thể tin rằng không ai của đăng một dành cho Windows 10 được nêu ra:

>>> import os 
>>> os.name 
'nt' 
>>> import platform 
>>> platform.system() 
'Windows' 
>>> platform.release() 
'10' 
+4

Windows 7: 'platform.release()' ''7'' – Hugo

+3

Vì vậy, vâng, tôi chỉ chạy' platform.release() 'trên * Windows * * 10 * của tôi, và nó chắc chắn chỉ cho tôi' '8' '. Có lẽ tôi đã cài đặt python trước khi nâng cấp, nhưng thực sự ?? – Codesmith

+0

Tôi đã nghĩ rằng nó có nhiều khả năng bạn nâng cấp từ Windows 8 (so với nó là một cài đặt sạch) và bất cứ điều gì Python nhìn lên trong registry hoặc bất cứ điều gì đã bị bỏ lại phía sau? – OJFord

108

Đối với hồ sơ đây là kết quả trên Mac:

>>> import os 
>>> os.name 
'posix' 
>>> import platform 
>>> platform.system() 
'Darwin' 
>>> platform.release() 
'8.11.1' 
35

Bạn có thể cũng sử dụng sys.platform nếu bạn đã nhập sys và bạn không muốn nhập một mô-đun khác

>>> import sys 
>>> sys.platform 
'linux2' 
+0

Có cách nào trong các phương pháp tiếp cận có bất kỳ lợi thế nào, ngoài việc có hay không nhập mô-đun khác? – matth

+0

Phạm vi là lợi thế chính. Bạn muốn càng ít tên biến toàn cầu càng tốt. Khi bạn đã có "sys" dưới dạng tên chung, bạn không nên thêm tên khác. Nhưng nếu bạn chưa sử dụng "sys", việc sử dụng "_platform" có thể mang tính mô tả hơn và ít có khả năng va chạm với một ý nghĩa khác. – sanderd17

17

Tôi làm điều này

import sys 
print sys.platform 

Documents ở đây: sys.platform.

Mọi thứ bạn cần có thể nằm trong mô-đun sys.

10

Tôi đang sử dụng công cụ WLST đi kèm với weblogic và không triển khai gói nền tảng.

wls:/offline> import os 
wls:/offline> print os.name 
java 
wls:/offline> import sys 
wls:/offline> print sys.platform 
'java1.5.0_11' 

Ngoài vá hệ thống javaos.py (issue with os.system() on windows 2003 with jdk1.5) (mà tôi không thể làm được, tôi phải sử dụng WebLogic out of the box), đây là những gì tôi sử dụng:

def iswindows(): 
    os = java.lang.System.getProperty("os.name") 
    return "win" in os.lower() 
9
>>> import platform 
>>> platform.system() 
5

trong bối cảnh đó ....

import platform 
is_windows=(platform.system().lower().find("win") > -1) 

if(is_windows): lv_dll=LV_dll("my_so_dll.dll") 
else:   lv_dll=LV_dll("./my_so_dll.so") 
+9

Đây là vấn đề nếu bạn đang sử dụng Mac vì platform.system() trả về "Darwin" trên máy Mac và "Darwin" .lower(). Find ("win") = 3. – mishaF

7

/usr/bin/python3.2

def cls(): 
    from subprocess import call 
    from platform import system 

    os = system() 
    if os == 'Linux': 
     call('clear', shell = True) 
    elif os == 'Windows': 
     call('cls', shell = True) 
+2

Chào mừng bạn đến với SO, đây là một thực hành tốt để giải thích lý do tại sao sử dụng giải pháp của bạn và không chỉ là cách thực hiện. Điều đó sẽ làm cho câu trả lời của bạn có giá trị hơn và giúp người đọc tiếp tục hiểu rõ hơn về cách bạn làm điều đó. Tôi cũng khuyên bạn nên xem Câu Hỏi Thường Gặp của chúng tôi: http://stackoverflow.com/faq. – ForceMagic

+0

Câu trả lời hay, thậm chí có thể ngang bằng với câu trả lời gốc. Nhưng bạn có thể giải thích tại sao. – vgoff

8

Đối với Jython là cách duy nhất để có được tên os tôi thấy là để kiểm tra os.name sở hữu Java (thử với sys, osplatform mô-đun cho Jython 2.5.3 trên WinXP):

def get_os_platform(): 
    """return platform name, but for Jython it uses os.name Java property""" 
    ver = sys.platform.lower() 
    if ver.startswith('java'): 
     import java.lang 
     ver = java.lang.System.getProperty("os.name").lower() 
    print('platform: %s' % (ver)) 
    return ver 
24

Nếu bạn muốn dữ liệu người dùng có thể đọc được nhưng vẫn chi tiết, bạn có thể sử dụng platform.platform()

>>> import platform 
>>> platform.platform() 
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne' 

Dưới đây là một vài cuộc gọi khác nhau có thể bạn có thể làm để xác định bạn đang ở đâu

import platform 
import sys 

def linux_distribution(): 
    try: 
    return platform.linux_distribution() 
    except: 
    return "N/A" 

print("""Python version: %s 
dist: %s 
linux_distribution: %s 
system: %s 
machine: %s 
platform: %s 
uname: %s 
version: %s 
mac_ver: %s 
""" % (
sys.version.split('\n'), 
str(platform.dist()), 
linux_distribution(), 
platform.system(), 
platform.machine(), 
platform.platform(), 
platform.uname(), 
platform.version(), 
platform.mac_ver(), 
)) 

Kết quả đầu ra của tập lệnh này chạy trên một vài hệ thống khác nhau có sẵn tại đây: https://github.com/hpcugent/easybuild/wiki/OS_flavor_name_version

6

kết quả thú vị trên windows 8:

>>> import os 
>>> os.name 
'nt' 
>>> import platform 
>>> platform.system() 
'Windows' 
>>> platform.release() 
'post2008Server' 

Edit: Đó là một bug

5

Nếu bạn không tìm kiếm phiên bản kernel vv, nhưng tìm kiếm các bản phân phối Linux bạn có thể muốn sử dụng sau đây

trong python2.6 +

>>> import platform 
>>> print platform.linux_distribution() 
('CentOS Linux', '6.0', 'Final') 
>>> print platform.linux_distribution()[0] 
CentOS Linux 
>>> print platform.linux_distribution()[1] 
6.0 

in python2.4

>>> import platform 
>>> print platform.dist() 
('centos', '6.0', 'Final') 
>>> print platform.dist()[0] 
centos 
>>> print platform.dist()[1] 
6.0 

Rõ ràng, điều này sẽ chỉ hoạt động nếu bạn đang chạy trên linux. Nếu bạn muốn có nhiều tập lệnh chung hơn trên các nền tảng, bạn có thể trộn chúng với các mẫu mã được đưa ra trong các câu trả lời khác.

69

Mẫu mã để phân biệt hệ điều hành sử dụng python:

from sys import platform as _platform 

if _platform == "linux" or _platform == "linux2": 
    # linux 
elif _platform == "darwin": 
    # MAC OS X 
elif _platform == "win32": 
    # Windows 
elif _platform == "win64": 
    # Windows 64-bit 
+1

Đây có phải là mã mẫu từ bất kỳ mô-đun python nào không? Đây là câu trả lời duy nhất trong thực tế, trả lời câu hỏi. –

+4

Đối với kết quả mờ, '' _platform.startswith ('linux') –

+1

câu trả lời gốc như được thấy ở đây http://stackoverflow.com/a/8220141/3286832 – Yannis

3

Kiểm tra các bài kiểm tra có sẵn với nền tảng mô-đun và in câu trả lời ra cho hệ thống của bạn:

import platform 

print dir(platform) 

for x in dir(platform): 
    if x[0].isalnum(): 
     try: 
      result = getattr(platform, x)() 
      print "platform."+x+": "+result 
     except TypeError: 
      continue 
4

thử điều này:

import os 

os.uname() 

và bạn có thể làm cho nó:

info=os.uname() 
info[0] 
info[1] 
+0

os.uname() không còn hoạt động như python 3.5. –

+1

Ngoài ra 'os.uname()' không có sẵn trên các cửa sổ: https://docs.python.org/2/library/os.html#os.uname _Availability: ** các hương vị gần đây của Unix. ** _ – ccpizza

6

Xem bạn có đang sử dụng Windows với Cygwin không, nơi os.nameposix.

>>> import os, platform 
>>> print os.name 
posix 
>>> print platform.system() 
CYGWIN_NT-6.3-WOW 
-4

Chỉ để hoàn thành, biến môi trường "OS" dường như được xác định ở mọi nơi. Trên Windows XP/7/8/10, nó được đặt thành "Windows_NT". Trên Linux SuSE SP2, nó được đặt thành "x86-64 linux sles11 [2]". Tôi không có quyền truy cập vào các máy OS-X hoặc BSD, sẽ rất thú vị khi kiểm tra ở đó.

import os 

os_name = os.getenv("OS") 
if os_name == "Windows_NT": 
    # Windows 
elif "linux" in os_name: 
    # Linux 
elif ... 
3

Bạn cũng có thể chỉ sử dụng mô-đun nền tảng mà không cần nhập mô-đun os để nhận tất cả thông tin.

>>> import platform 
>>> platform.os.name 
'posix' 
>>> platform.uname() 
('Darwin', 'mainframe.local', '15.3.0', 'Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64', 'x86_64', 'i386') 

Một bố cục tốt đẹp và gọn gàng cho mục đích báo cáo có thể đạt được bằng dòng này:

for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1] 

Điều đó mang lại kết quả này:

system : Darwin 
node : mainframe.local 
release : 15.3.0 
version : Darwin Kernel Version 15.3.0: Thu Dec 10 18:40:58 PST 2015; root:xnu-3248.30.4~1/RELEASE_X86_64 
machine : x86_64 
processor : i386 

phiên bản hệ điều hành nào là mất tích thường là nhưng bạn nên biết nếu bạn đang chạy các cửa sổ, linux hoặc mac một nền tảng indipendent cách là sử dụng thử nghiệm này:

In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]: 
    ....:  if i[0]: 
    ....:   print 'Version: ',i[0] 
1

Sử dụng các từ khóa import osos.name.

2

Làm thế nào về một câu trả lời mới:

import psutil 
psutil.OSX  #True 
psutil.WINDOWS #False 
psutil.LINUX #False 

Đây sẽ là đầu ra nếu tôi đã sử dụng OSX

+2

Có lẽ thanh lịch nhất trong tất cả các câu trả lời – jsphpl

0

Nếu bạn đang chạy hệ điều hành MacOS X và chạy platform.system() bạn nhận được darwin vì hệ điều hành MacOS X được xây dựng trên Hệ điều hành Darwin của Apple. Darwin là hạt nhân của macOS X và về cơ bản là macOS X không có GUI.

Các vấn đề liên quan