Tôi cần xem gì để xem tôi đang dùng Windows hay Unix, v.v.?
Tôi cần xem gì để xem tôi đang dùng Windows hay Unix, v.v.?
Câu trả lời:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
Đầu ra của platform.system()
như sau:
Linux
Darwin
Windows
Xem: platform
- Truy cập vào dữ liệu nhận dạng của nền tảng cơ bản
platform
hơn sys.platform
?
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"
các phiên bản mới hơn. platform.system()
đã luôn luôn trở lại chỉ "Linux"
.
os.uname()
chỉ tồn tại cho các hệ thống Unix. Tài liệu Python 3: docs.python.org/3/l Library / os.html Availability: recent flavors of Unix.
Dang - lbrandy đánh bại tôi, 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 chưa có ai đăng một cái cho Windows 10:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
platform.release()
'7'
platform.release()
trên Windows 10 của tôi , và nó chắc chắn đã cho tôi '8'
. Có lẽ tôi đã cài đặt python trước khi nâng cấp, nhưng thực sự ??
Đối với hồ sơ ở đây, kết quả trên Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
platform.release()
trả về'19.2.0'
Mã mẫu để phân biệt hệ điều hành bằ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
Bạn cũng có thể sử dụng sys.platform
nếu bạn đã nhập sys
và bạn không muốn nhập mô-đun khác
>>> import sys
>>> sys.platform
'linux2'
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.pl platform ()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Đây là một vài cuộc gọi khác nhau mà bạn có thể thực hiện để 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(),
))
Các 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 (Linux, Windows, Solaris, MacOS) và kiến trúc (x86, x64, Itanium, power pc, sparc) có sẵn tại đây: https://github.com/hpcugent/easybuild/ wiki / OS_flavor_name_version
Ví dụ, máy chủ Ubuntu 12.04 cung cấp:
Python version: ['2.6.5 (r265:79063, Oct 1 2012, 22:04:36) ', '[GCC 4.4.3]']
dist: ('Ubuntu', '10.04', 'lucid')
linux_distribution: ('Ubuntu', '10.04', 'lucid')
system: Linux
machine: x86_64
platform: Linux-2.6.32-32-server-x86_64-with-Ubuntu-10.04-lucid
uname: ('Linux', 'xxx', '2.6.32-32-server', '#62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011', 'x86_64', '')
version: #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011
mac_ver: ('', ('', '', ''), '')
DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
Truyện ngắn
Sử dụng platform.system()
. Nó trả về Windows
, Linux
hoặc Darwin
(cho OSX).
Câu chuyện dài
Có 3 cách để có được HĐH trong Python, mỗi cách đều có ưu và nhược điểm riêng:
Phương pháp 1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
Cách thức hoạt động ( nguồn ): Trong nội bộ, nó gọi API hệ điều hành để lấy tên của HĐH theo định nghĩa của HĐH. Xem ở đây để biết các giá trị cụ thể của hệ điều hành.
Pro: Không có phép thuật, cấp độ thấp.
Con: phụ thuộc phiên bản hệ điều hành, vì vậy tốt nhất không sử dụng trực tiếp.
Cách 2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
Cách thức hoạt động ( nguồn ): Trong nội bộ, nó kiểm tra xem python có các mô-đun dành riêng cho hệ điều hành được gọi là posix hoặc nt.
Pro: Đơn giản để kiểm tra nếu hệ điều hành posix
Con: không có sự khác biệt giữa Linux hoặc OSX.
Phương pháp 3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
Cách thức hoạt động ( nguồn ): Bên trong, cuối cùng nó sẽ gọi API hệ điều hành nội bộ, lấy tên cụ thể của phiên bản hệ điều hành như 'win32' hoặc 'win16' hoặc 'linux1' và sau đó bình thường hóa thành các tên chung hơn như 'Windows' hoặc 'Linux' hoặc "Darwin" bằng cách áp dụng một số phương pháp phỏng đoán.
Pro: Cách di động tốt nhất cho Windows, OSX và Linux.
Con: Người Python phải tiếp tục bình thường hóa heuristic cho đến nay.
Tóm lược
platform.system()
.posix
hoặc nt
sau đó sử dụng os.name
.sys.platform
.Làm thế nào về một câu trả lời mới:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
Đây sẽ là đầu ra nếu tôi đang sử dụng MACOS
Tôi đã bắt đầu liệt kê một cách có hệ thống hơn một chút về những giá trị bạn có thể mong đợi bằng cách sử dụng các mô-đun khác nhau (thoải mái chỉnh sửa và thêm hệ thống của bạn):
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
sys.platform
được thêm vào bởi phiên bản kernel, vdlinux2
, mọi thứ khác vẫn giữ nguyênplatform.architecture() = ('64bit', 'ELF')
(với cột 32 bit chạy trong hệ thống con 32 bit)
official python installer 64bit 32bit
------------------------- ----- -----
os.name nt nt
sys.platform win32 win32
platform.system() Windows Windows
sysconfig.get_platform() win-amd64 win32
platform.machine() AMD64 AMD64
platform.architecture() ('64bit', 'WindowsPE') ('64bit', 'WindowsPE')
msys2 64bit 32bit
----- ----- -----
os.name posix posix
sys.platform msys msys
platform.system() MSYS_NT-10.0 MSYS_NT-10.0-WOW
sysconfig.get_platform() msys-2.11.2-x86_64 msys-2.11.2-i686
platform.machine() x86_64 i686
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
msys2 mingw-w64-x86_64-python3 mingw-w64-i686-python3
----- ------------------------ ----------------------
os.name nt nt
sys.platform win32 win32
platform.system() Windows Windows
sysconfig.get_platform() mingw mingw
platform.machine() AMD64 AMD64
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
cygwin 64bit 32bit
------ ----- -----
os.name posix posix
sys.platform cygwin cygwin
platform.system() CYGWIN_NT-10.0 CYGWIN_NT-10.0-WOW
sysconfig.get_platform() cygwin-3.0.1-x86_64 cygwin-3.0.1-i686
platform.machine() x86_64 i686
platform.architecture() ('64bit', 'WindowsPE') ('32bit', 'WindowsPE')
Một số nhận xét:
distutils.util.get_platform()
có cái giống hệt với `sysconfig.get_pl platformĐể so sánh với hệ thống của bạn, chỉ cần chạy tập lệnh này (và vui lòng nối thêm kết quả tại đây nếu thiếu :)
from __future__ import print_function
import os
import sys
import platform
import sysconfig
print("os.name ", os.name)
print("sys.platform ", sys.platform)
print("platform.system() ", platform.system())
print("sysconfig.get_platform() ", sysconfig.get_platform())
print("platform.machine() ", platform.machine())
print("platform.architecture() ", platform.architecture())
Tôi đang sử dụng công cụ WLST đi kèm với weblogic và nó 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 việc vá hệ thống javaos.py (sự cố với os.system () trên windows 2003 với jdk1.5 ) (mà tôi không thể làm được, tôi phải sử dụng weblogic ngoài hộp), đây là những gì tôi sử dụng:
def iswindows():
os = java.lang.System.getProperty( "os.name" )
return "win" in os.lower()
/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)
Đố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
tài sản Java (thử với sys
, os
và platform
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
trong cùng một tĩnh mạch ....
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")
Nếu bạn không tìm kiếm phiên bản kernel, v.v., nhưng đang tìm bản phân phối linux, bạn có thể muốn sử dụng phần sau
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
trong 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 này trên linux. Nếu bạn muốn có tập lệnh chung hơn trên các nền tảng, bạn có thể kết hợp tập lệnh này với các mẫu mã được đưa ra trong các câu trả lời khác.
thử cái này:
import os
os.uname()
và bạn có thể làm cho nó:
info=os.uname()
info[0]
info[1]
os.uname()
không có sẵn trên windows: docs.python.org/2/l Library / os.html # os.uname Tính khả dụng: các hương vị gần đây của Unix.
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 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
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 để có được 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 đẹp và gọn gàng cho mục đích báo cáo có thể đạt được bằng cách sử dụ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 đầu ra 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
Điều còn thiếu thường là phiên bản hệ điều hành nhưng bạn nên biết nếu bạn đang chạy windows, linux hay mac, một cách phụ thuộc nền tảng 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]
Tôi biết đây là một câu hỏi cũ nhưng tôi tin rằng câu trả lời của tôi là một câu hỏi có thể hữu ích cho một số người đang tìm kiếm một cách dễ dàng, đơn giản để hiểu pythonic để phát hiện HĐH trong mã của họ. Đã thử nghiệm trên python3.7
from sys import platform
class UnsupportedPlatform(Exception):
pass
if "linux" in platform:
print("linux")
elif "darwin" in platform:
print("mac")
elif "win" in platform:
print("windows")
else:
raise UnsupportedPlatform
Nếu bạn đang chạy macOS X và chạy, platform.system()
bạn sẽ nhận được darwin vì 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.
Giải pháp này hoạt động cho cả python
và jython
.
mô-đun os_identify.py :
import platform
import os
# This module contains functions to determine the basic type of
# OS we are running on.
# Contrary to the functions in the `os` and `platform` modules,
# these allow to identify the actual basic OS,
# no matter whether running on the `python` or `jython` interpreter.
def is_linux():
try:
platform.linux_distribution()
return True
except:
return False
def is_windows():
try:
platform.win32_ver()
return True
except:
return False
def is_mac():
try:
platform.mac_ver()
return True
except:
return False
def name():
if is_linux():
return "Linux"
elif is_windows():
return "Windows"
elif is_mac():
return "Mac"
else:
return "<unknown>"
Sử dụng như thế này:
import os_identify
print "My OS: " + os_identify.name()
Làm thế nào về một thực hiện Enum đơn giản như sau? Không cần libs bên ngoài!
import platform
from enum import Enum
class OS(Enum):
def checkPlatform(osName):
return osName.lower()== platform.system().lower()
MAC = checkPlatform("darwin")
LINUX = checkPlatform("linux")
WINDOWS = checkPlatform("windows") #I haven't test this one
Đơn giản là bạn có thể truy cập với giá trị Enum
if OS.LINUX.value:
print("Cool it is Linux")
PS là python3
Bạn có thể xem mã trong pyOSinfo
đó là một phần của gói pip-date , để có được thông tin hệ điều hành phù hợp nhất, như được thấy từ bản phân phối Python của bạn.
Một trong những lý do phổ biến nhất mà mọi người muốn kiểm tra HĐH của họ là tính tương thích của thiết bị đầu cuối và nếu một số lệnh hệ thống nhất định có sẵn. Thật không may, sự thành công của việc kiểm tra này phần nào phụ thuộc vào cài đặt và hệ điều hành python của bạn. Ví dụ, uname
không có sẵn trên hầu hết các gói python của Windows. Chương trình python ở trên sẽ cho bạn thấy đầu ra của các hàm dựng sẵn được sử dụng phổ biến nhất, đã được cung cấp bởi os, sys, platform, site
.
Vì vậy, cách tốt nhất để chỉ lấy mã thiết yếu là xem đó là một ví dụ. (Tôi đoán rằng tôi có thể vừa dán nó ở đây, nhưng điều đó sẽ không đúng về mặt chính trị.)
Tôi đến trễ trò chơi, nhưng trong trường hợp có ai cần nó, đây là chức năng tôi sử dụng để điều chỉnh mã của mình để nó chạy trên Windows, Linux và MacOs:
import sys
def get_os(osoptions={'linux':'linux','Windows':'win','macos':'darwin'}):
'''
get OS to allow code specifics
'''
opsys = [k for k in osoptions.keys() if sys.platform.lower().find(osoptions[k].lower()) != -1]
try:
return opsys[0]
except:
return 'unknown_OS'