ฉันต้องดูอะไรบ้างเพื่อดูว่าฉันใช้ Windows หรือ Unix หรือไม่
ฉันต้องดูอะไรบ้างเพื่อดูว่าฉันใช้ Windows หรือ Unix หรือไม่
คำตอบ:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
ผลลัพธ์ของplatform.system()
จะเป็นดังนี้:
Linux
Darwin
Windows
platform
มากกว่าsys.platform
?
platform.system()
ผลตอบแทนแทน"Windows"
นอกจากนี้ยังมีใน Python เวอร์ชันเก่าในขณะที่มันมีเพียงใหม่ ได้กลับมาเสมอเพียง "win32"
sys.platform
"linux2"
"linux"
platform.system()
"Linux"
os.uname()
มีอยู่สำหรับระบบ Unix เท่านั้น The Python 3 docs: docs.python.org/3/library/os.html Availability: recent flavors of Unix.
แดง - lbrandy ทุบตีฉันจนชก แต่นั่นไม่ได้หมายความว่าฉันไม่สามารถให้ผลลัพธ์ระบบสำหรับ Vista กับคุณได้!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
... และฉันไม่อยากจะเชื่อเลยว่าไม่มีใครโพสต์ไว้สำหรับ Windows 10 เลย:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
platform.release()
'7'
platform.release()
ของฉันและมันก็ให้ฉันแน่นอน บางทีฉันอาจติดตั้งไพ ธ อนก่อนจะอัพเกรด แต่จริง ๆ ?? '8'
สำหรับบันทึกนี่คือผลลัพธ์ใน Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
platform.release()
ส่งกลับ'19.2.0'
โค้ดตัวอย่างเพื่อแยกความแตกต่างของระบบปฏิบัติการโดยใช้ไพ ธ อน:
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
คุณสามารถใช้sys.platform
หากคุณได้นำเข้าแล้วsys
และคุณไม่ต้องการนำเข้าโมดูลอื่น
>>> import sys
>>> sys.platform
'linux2'
หากคุณต้องการข้อมูลที่ผู้ใช้สามารถอ่านได้ แต่ยังมีรายละเอียดอยู่คุณสามารถใช้platform.platform ()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
นี่คือการโทรที่คุณสามารถทำได้เพื่อระบุว่าคุณอยู่ที่ไหน
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(),
))
ผลลัพธ์ของสคริปต์นี้ทำงานบนระบบที่แตกต่างกันไม่กี่ (Linux, Windows, Solaris, MacOS) และสถาปัตยกรรม (x86, x64, Itanium, power pc, sparc) มีให้ที่นี่: https://github.com/hpcugent/easybuild/ วิกิพีเดีย / OS_flavor_name_version
ตัวอย่างเช่นเซิร์ฟเวอร์ Ubuntu 12.04 ให้:
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
เรื่องสั้น
platform.system()
ใช้ ก็จะส่งกลับWindows
, Linux
หรือDarwin
(สำหรับ OSX)
เรื่องยาว
มี 3 วิธีในการรับระบบปฏิบัติการใน Python โดยแต่ละโปรแกรมมีข้อดีและข้อเสียดังนี้
วิธีที่ 1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
วิธีการทำงาน ( แหล่งที่มา ): ภายในจะเรียก OS APIs เพื่อรับชื่อของระบบปฏิบัติการตามที่กำหนดโดยระบบปฏิบัติการ ดูที่นี่สำหรับค่าเฉพาะระบบปฏิบัติการต่างๆ
Pro: ไม่มีเวทย์มนตร์ระดับต่ำ
คอนดิชั่น: ขึ้นอยู่กับเวอร์ชั่นของระบบปฏิบัติการ, ดังนั้นจึงไม่ควรใช้โดยตรง.
วิธีที่ 2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
วิธีการทำงาน ( แหล่งที่มา ): ภายในตรวจสอบว่าหลามมีโมดูลเฉพาะระบบปฏิบัติการที่เรียกว่า posix หรือ nt
Pro: ง่ายต่อการตรวจสอบว่าระบบปฏิบัติการ posix
คอนดิชั่น: ไม่มีความแตกต่างระหว่าง Linux หรือ OSX
วิธีที่ 3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
วิธีการทำงาน ( แหล่งที่มา ): ภายในที่สุดแล้วจะเรียกใช้ API ของระบบภายในรับชื่อเฉพาะเวอร์ชันของระบบปฏิบัติการเช่น 'win32' หรือ 'win16' หรือ 'linux1' จากนั้นปรับมาตรฐานให้เป็นชื่อทั่วไปเช่น 'Windows' หรือ 'Linux' หรือ 'ดาร์วิน' โดยใช้ฮิวริสติกหลายแบบ
Pro: วิธีพกพาที่ดีที่สุดสำหรับ Windows, OSX และ Linux
คอนดิชั่น: งูหลามคนจะต้องรักษามาตรฐานการแก้ปัญหาให้ทันสมัยอยู่เสมอ
สรุป
platform.system()
แล้ววิธีที่เชื่อถือได้มากที่สุดคือposix
หรือnt
ใช้os.name
แล้วการใช้งานsys.platform
ตัวเองแล้วใช้คำตอบใหม่:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
นี่จะเป็นผลลัพธ์ถ้าฉันใช้ MACOS
ฉันเริ่มรายการที่เป็นระบบขึ้นเล็กน้อยเกี่ยวกับค่าที่คุณคาดหวังจากการใช้โมดูลต่าง ๆ (รู้สึกฟรีเพื่อแก้ไขและเพิ่มระบบของคุณ):
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
sys.platform
ด้วยเคอร์เนลเวอร์ชั่นเช่นlinux2
ทุกอย่างอื่นยังคงเหมือนเดิมplatform.architecture() = ('64bit', 'ELF')
(ด้วยคอลัมน์ 32 บิตที่ทำงานในระบบย่อย 32 บิต)
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')
ข้อสังเกตบางส่วน:
distutils.util.get_platform()
ซึ่งเหมือนกับ `sysconfig.get_platformหากต้องการเปรียบเทียบกับระบบของคุณให้เรียกใช้สคริปต์นี้ (และโปรดผนวกผลลัพธ์ที่นี่หากไม่มี :)
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())
ฉันใช้เครื่องมือ WLST ที่มาพร้อมกับ weblogic และไม่ได้ใช้แพ็คเกจแพกเกจ
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
นอกเหนือจากการแก้ไขระบบjavaos.py ( ปัญหากับ os.system () บน windows 2003 ด้วย jdk1.5 ) (ซึ่งฉันทำไม่ได้ฉันต้องใช้เว็บบล็อกนอกกรอบ) นี่คือสิ่งที่ฉันใช้:
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)
สำหรับ Jython วิธีเดียวที่จะได้รับชื่อ OS ผมพบคือการตรวจสอบos.name
คุณสมบัติ Java (พยายามกับsys
, os
และplatform
โมดูลสำหรับ Jython 2.5.3 บน 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
ผลลัพธ์ที่น่าสนใจบน windows 8:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'post2008Server'
แก้ไข:นั่นเป็นข้อบกพร่อง
ระวังถ้าคุณอยู่ใน Windows ด้วย Cygwin ที่เป็นos.name
posix
>>> import os, platform
>>> print os.name
posix
>>> print platform.system()
CYGWIN_NT-6.3-WOW
ในหลอดเลือดดำเดียวกัน ....
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")
หากคุณไม่ได้กำลังมองหารุ่นเคอร์เนล ฯลฯ แต่กำลังมองหาการกระจาย linux คุณอาจต้องการใช้ต่อไปนี้
ใน 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
ใน python2.4
>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0
เห็นได้ชัดว่านี่จะทำงานได้ก็ต่อเมื่อคุณใช้งานบน linux หากคุณต้องการให้มีสคริปต์ทั่วไปทั่วทั้งแพลตฟอร์มคุณสามารถผสมกับตัวอย่างโค้ดที่ให้ไว้ในคำตอบอื่น ๆ
ลองนี้:
import os
os.uname()
และคุณสามารถทำได้:
info=os.uname()
info[0]
info[1]
os.uname()
ไม่มีให้ใน windows: docs.python.org/2/library/os.html#os.uname ความพร้อมใช้งาน: Unix รสชาติล่าสุด
ตรวจสอบการทดสอบที่มีด้วยแพลตฟอร์มโมดูลและพิมพ์คำตอบสำหรับระบบของคุณ:
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
คุณสามารถใช้โมดูลแพลตฟอร์มเท่านั้นโดยไม่ต้องนำเข้าโมดูล os เพื่อรับข้อมูลทั้งหมด
>>> 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')
เค้าโครงที่ดีและเป็นระเบียบเรียบร้อยสำหรับการรายงานสามารถทำได้โดยใช้บรรทัดนี้:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
ที่ให้ผลลัพธ์นี้:
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
สิ่งที่ขาดหายไปมักจะเป็นรุ่นของระบบปฏิบัติการ แต่คุณควรรู้ว่าคุณใช้ windows, linux หรือ mac หรือไม่และเป็นวิธีที่แพลตฟอร์มที่ไม่พึงประสงค์คือการใช้การทดสอบนี้:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
ฉันรู้ว่านี่เป็นคำถามเก่า แต่ฉันเชื่อว่าคำตอบของฉันคือคำตอบที่อาจเป็นประโยชน์กับบางคนที่กำลังมองหาวิธีที่ง่ายและเข้าใจได้ง่ายในการตรวจสอบระบบปฏิบัติการในรหัสของพวกเขา ทดสอบกับ 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
หากคุณกำลังเรียกใช้ macOS X และเรียกใช้platform.system()
คุณจะได้รับดาร์วินเพราะ macOS X สร้างขึ้นในระบบปฏิบัติการดาร์วินของ Apple ดาร์วินเป็นเคอร์เนลของ macOS X และเป็นพื้นฐานของ macOS X ที่ไม่มี GUI
วิธีนี้ใช้ได้ทั้งpython
และjython
และ
โมดูล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>"
ใช้แบบนี้:
import os_identify
print "My OS: " + os_identify.name()
การใช้ Enum แบบง่าย ๆ เป็นอย่างไรต่อไปนี้ ไม่จำเป็นต้องใช้ libs ภายนอก!
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
เพียงคุณสามารถเข้าถึงด้วยค่า Enum
if OS.LINUX.value:
print("Cool it is Linux")
PS มันคือ python3
คุณสามารถดูรหัสpyOSinfo
ซึ่งเป็นส่วนหนึ่งของแพ็คเกจวันที่เพื่อรับข้อมูลระบบปฏิบัติการที่เกี่ยวข้องมากที่สุดเท่าที่เห็นจากการแจกจ่าย Python ของคุณ
หนึ่งในสาเหตุที่พบบ่อยที่สุดที่ผู้คนต้องการตรวจสอบระบบปฏิบัติการของพวกเขาคือความเข้ากันได้ของเทอร์มินัลและหากมีคำสั่งของระบบที่พร้อมใช้งาน น่าเสียดายที่ความสำเร็จของการตรวจสอบนี้ขึ้นอยู่กับการติดตั้งหลามและระบบปฏิบัติการของคุณ ตัวอย่างเช่นuname
ไม่สามารถใช้ได้กับแพ็คเกจงูหลาม Windows ส่วนใหญ่ os, sys, platform, site
โปรแกรมหลามดังกล่าวข้างต้นจะแสดงผลลัพธ์ของการใช้กันมากที่สุดในตัวฟังก์ชั่นให้แล้วโดย
ดังนั้นวิธีที่ดีที่สุดที่จะได้รับเฉพาะรหัสที่สำคัญกำลังมองหาที่ที่เป็นตัวอย่าง (ฉันเดาว่าฉันสามารถวางที่นี่ได้ แต่นั่นอาจไม่ถูกต้องทางการเมือง)
ฉันมาสายเกม แต่ในกรณีที่ใครต้องการมันเป็นฟังก์ชั่นที่ฉันใช้ในการปรับรหัสของฉันเพื่อให้มันทำงานบน Windows, Linux และ 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'