Windows veya Unix'te olup olmadığımı görmek için nelere bakmam gerekir?
Windows veya Unix'te olup olmadığımı görmek için nelere bakmam gerekir?
Yanıtlar:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
Çıktısı platform.system()
aşağıdaki gibidir:
Linux
Darwin
Windows
Bakınız: platform
- Temel platformun tanımlayıcı verilerine erişim
platform
üzerinde sys.platform
?
platform.system()
döner . ayrıca Python'un eski sürümlerinde bulunurken, sadece yeni sürümlerde bulunur. hep geri döndü . "Windows"
"win32"
sys.platform
"linux2"
"linux"
platform.system()
"Linux"
os.uname()
yalnızca Unix sistemleri için mevcuttur. Python 3 belgeleri: docs.python.org/3/library/os.html Availability: recent flavors of Unix.
Dang - lbrandy beni yumruk attı, ama bu size Vista için sistem sonuçlarını sağlayamayacağım anlamına gelmez!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
... ve henüz kimsenin Windows 10 için bir tane yayınlamadığına inanamıyorum:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
platform.release()
'7'
platform.release()
benim üzerinde , Windows 10 ve kesinlikle sadece bana verdi '8'
. Belki yükseltmeden önce python yükledim, ama gerçekten ??
Kayıt için Mac'te sonuçlar:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
platform.release()
geri dönüyor'19.2.0'
İşletim sistemlerini python kullanarak ayırt etmek için örnek kod:
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
Ayrıca kullanabilirsiniz sys.platform
zaten ithal varsa sys
ve başka modülü almak istemiyorum
>>> import sys
>>> sys.platform
'linux2'
Kullanıcının okuyabileceği ancak yine de ayrıntılı olmasını istiyorsanız platform.platform () kullanabilirsiniz
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Nerede olduğunuzu belirlemek için yapabileceğiniz birkaç farklı olası arama
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(),
))
Bu komut dosyasının çıktıları birkaç farklı sistemde (Linux, Windows, Solaris, MacOS) çalıştırıldı ve mimariler (x86, x64, Itanium, power pc, sparc) burada bulunabilir: https://github.com/hpcugent/easybuild/ wiki / OS_flavor_name_version
Örneğin Ubuntu 12.04 sunucusu şunları verir:
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
Kısa hikaye
Kullanın platform.system()
. Bu döner Windows
, Linux
ya da Darwin
(OSX için).
Uzun Hikaye
Her biri kendi profesyonel ve eksileri olan Python'da OS almanın 3 yolu vardır:
Yöntem 1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
Bu nasıl çalışır ( kaynak ): Dahili olarak OS tarafından tanımlanan OS adını almak için OS API'lerini çağırır. İşletim sistemine özgü çeşitli değerler için buraya bakın .
Pro: Büyü yok, düşük seviye.
Con: İşletim sistemi sürümüne bağlıdır, bu yüzden doğrudan kullanmamak en iyisidir.
Yöntem 2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
Bu nasıl çalışır ( kaynak ): Dahili olarak python'un posix veya nt adı verilen OS'ye özgü modülleri olup olmadığını kontrol eder.
Pro: Posix işletim sisteminin olup olmadığını kontrol etmek basit
Con: Linux veya OSX arasında fark yok.
Yöntem 3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
Bu nasıl çalışır ( kaynak ): Dahili olarak dahili OS API'lerini arayacak, 'win32' veya 'win16' veya 'linux1' gibi işletim sistemi sürümüne özel bir ad alacak ve daha sonra 'Windows' veya 'Linux' gibi daha genel adlara normalleştirecek veya Birkaç buluşsal yöntem uygulayarak 'Darwin'.
Pro: Windows, OSX ve Linux için en iyi taşınabilir yol.
Con: Python millet normalleşmeyi buluşsal olarak güncel tutmalıdır.
özet
platform.system()
.posix
veya nt
daha sonraos.name
.sys.platform
.Yeni bir cevaba ne dersiniz:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
MACOS kullanıyor olsaydım bu çıktı olurdu
Çeşitli modülleri kullanarak beklediğiniz değerlerin biraz daha sistematik bir listesini başlattım (sisteminizi düzenlemek ve eklemek için çekinmeyin):
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
sys.platform
çekirdek sürümü eklenir, örneğin linux2
, diğer her şey aynı kalırplatform.architecture() = ('64bit', 'ELF')
(32 bit alt sistemde 32 bit sütun çalışıyor)
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')
Bazı açıklamalar:
distutils.util.get_platform()
sysconfig.get_platform ile aynı olanSisteminizle karşılaştırmak için bu komut dosyasını çalıştırın (ve lütfen eksikse sonuçları buraya ekleyin :)
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())
Weblogic ile gelen WLST aracını kullanıyorum ve platform paketini uygulamaz.
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
Dışında javaos.py ( jdk1.5 ile windows 2003 üzerinde os.system () sorunu) yama ( dışında yapamam, kutunun dışında weblogic kullanmak zorunda), bu ne kullanıyorum:
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 için buldum os adını almak için tek yol kontrol etmektir os.name
(ile çalıştı Java özelliğini sys
, os
ve platform
WinXP'de Jython 2.5.3 için modüller):
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
aynı damarda....
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")
Çekirdek sürümünü vb. Arıyorsanız, ancak linux dağıtımını arıyorsanız, aşağıdakileri kullanmak isteyebilirsiniz
python2.6 + 'da
>>> 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 içinde
>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0
Açıkçası, bu sadece linux üzerinde çalıştırıyorsanız çalışır. Platformlar arasında daha genel bir komut dosyasına sahip olmak istiyorsanız, bunu diğer yanıtlarda verilen kod örnekleri ile karıştırabilirsiniz.
bunu dene:
import os
os.uname()
ve bunu yapabilirsiniz:
info=os.uname()
info[0]
info[1]
os.uname()
pencerelerde kullanılamaz: docs.python.org/2/library/os.html#os.uname Durumu: Unix son tatlar.
Modül platformunda mevcut testleri kontrol edin ve sisteminiz için cevabı yazdırı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
Ayrıca tüm bilgileri almak için os modülünü içe aktarmadan yalnızca platform modülünü kullanabilirsiniz.
>>> 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')
Bu hat kullanılarak raporlama amacıyla güzel ve düzenli bir düzen elde edilebilir:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
Bu çıktıyı verir:
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
Genellikle eksik olan işletim sistemi sürümüdür, ancak Windows, linux veya mac çalıştırdığınızı bilmelisiniz, platformun bağımsız bir yolu bu testi kullanmaktır:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
Bunun eski bir soru olduğunu biliyorum ama cevabımın kodlarında işletim sistemi tespit etmek için kolay, anlaşılması kolay bir pitonik yol arayan bazı insanlar için yararlı olabilecek bir soru olduğuna inanıyorum. Python üzerinde test edildi
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 kullanıyorsanız ve çalıştırıyorsanız platform.system()
macOS X, Apple'ın Darwin işletim sistemi üzerine kurulduğu için darwin'i alırsınız. Darwin, macOS X'in çekirdeğidir ve aslında GUI'siz macOS X'dir.
Bu çözüm için çalışır python
vejython
.
modül 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>"
Bunun gibi kullanın:
import os_identify
print "My OS: " + os_identify.name()
Aşağıdaki gibi basit bir Enum uygulamasına ne dersiniz? Dış kütüphanelere gerek yok!
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 değeriyle kolayca erişebilirsiniz
if OS.LINUX.value:
print("Cool it is Linux")
PS python3 olduğunu
Python dağıtımınızdan görüldüğü gibi en alakalı işletim sistemi bilgilerini almak için pip-date paketinin pyOSinfo
parçası olan koda bakabilirsiniz .
İnsanların işletim sistemlerini kontrol etmek istemelerinin en yaygın nedenlerinden biri terminal uyumluluğu ve belirli sistem komutlarının mevcut olup olmadığıdır. Ne yazık ki, bu kontrolün başarısı biraz python kurulumunuza ve işletim sisteminize bağlıdır. Örneğin, uname
çoğu Windows python paketinde yoktur. Yukarıdaki python programı, daha önce tarafından sağlanan en yaygın kullanılan yerleşik işlevlerin çıktısını gösterecektir os, sys, platform, site
.
En iyi yolu sadece zorunlu kod bakıyor olsun Yani bu bir örnek olarak. (Sanırım buraya yapıştırabilirdim, ama bu politik olarak doğru olmazdı.)
Oyuna geç kaldım, ancak herhangi birinin ihtiyacı olması durumunda, kodumda ayarlamalar yapmak için kullandığım bir işlev, böylece Windows, Linux ve MacO'larda çalışıyor:
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'