Apa yang perlu saya lihat untuk melihat apakah saya menggunakan Windows atau Unix, dll?
Apa yang perlu saya lihat untuk melihat apakah saya menggunakan Windows atau Unix, dll?
Jawaban:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Linux'
>>> platform.release()
'2.6.22-15-generic'
Outputnya platform.system()
adalah sebagai berikut:
Linux
Darwin
Windows
Lihat: platform
- Akses ke data pengenal platform yang mendasarinya
platform
lebih sys.platform
?
platform.system()
mengembalikan "Windows"
bukan "win32"
. sys.platform
juga berisi "linux2"
versi lama dari Python sementara itu hanya berisi versi "linux"
yang lebih baru. platform.system()
selalu kembali saja "Linux"
.
os.uname()
hanya ada untuk sistem Unix. Python 3 docs: docs.python.org/3/library/os.html Availability: recent flavors of Unix.
Dang - lbrandy mengalahkan saya, tapi itu tidak berarti saya tidak bisa memberi Anda hasil sistem untuk Vista!
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'Vista'
... dan saya tidak percaya belum ada yang diposting untuk Windows 10:
>>> import os
>>> os.name
'nt'
>>> import platform
>>> platform.system()
'Windows'
>>> platform.release()
'10'
platform.release()
'7'
platform.release()
saya , dan itu pasti memberi saya . Mungkin saya menginstal python sebelum melakukan upgrade, tapi benarkah ?? '8'
Sebagai catatan, inilah hasilnya di Mac:
>>> import os
>>> os.name
'posix'
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.release()
'8.11.1'
platform.release()
pengembalian'19.2.0'
Kode sampel untuk membedakan OS menggunakan 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
Anda juga dapat menggunakan sys.platform
jika Anda sudah mengimpor sys
dan Anda tidak ingin mengimpor modul lain
>>> import sys
>>> sys.platform
'linux2'
Jika Anda ingin data yang dapat dibaca pengguna tetapi masih detail, Anda bisa menggunakannya platform.platform ()
>>> import platform
>>> platform.platform()
'Linux-3.3.0-8.fc16.x86_64-x86_64-with-fedora-16-Verne'
Berikut beberapa kemungkinan panggilan yang dapat Anda buat untuk mengidentifikasi di mana Anda berada
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(),
))
Output dari skrip ini dijalankan pada beberapa sistem yang berbeda (Linux, Windows, Solaris, MacOS) dan arsitektur (x86, x64, Itanium, power pc, sparc) tersedia di sini: https://github.com/hpcugent/easybuild/ wiki / OS_flavor_name_version
Server Ubuntu 12.04 misalnya memberi:
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
Cerita pendek
Gunakan platform.system()
. Itu kembali Windows
, Linux
atau Darwin
(untuk OSX).
Cerita panjang
Ada 3 cara untuk mendapatkan OS di Python, masing-masing dengan pro dan kontra sendiri:
Metode 1
>>> import sys
>>> sys.platform
'win32' # could be 'linux', 'linux2, 'darwin', 'freebsd8' etc
Bagaimana ini bekerja ( sumber ): Secara internal ia memanggil OS OS untuk mendapatkan nama OS sebagaimana didefinisikan oleh OS. Lihat di sini untuk berbagai nilai spesifik OS.
Pro: Tidak ada sihir, level rendah.
Con: Tergantung pada versi OS, jadi sebaiknya jangan gunakan secara langsung.
Metode 2
>>> import os
>>> os.name
'nt' # for Linux and Mac it prints 'posix'
Bagaimana ini bekerja ( sumber ): Secara internal ia memeriksa apakah python memiliki modul-modul khusus OS yang disebut posix atau nt.
Pro: Mudah untuk memeriksa apakah posix OS
Con: tidak ada perbedaan antara Linux atau OSX.
Metode 3
>>> import platform
>>> platform.system()
'Windows' # for Linux it prints 'Linux', Mac it prints `'Darwin'
Bagaimana ini bekerja ( sumber ): Secara internal pada akhirnya akan memanggil API OS internal, mendapatkan nama spesifik versi OS seperti 'win32' atau 'win16' atau 'linux1' dan kemudian menormalkan ke nama-nama yang lebih umum seperti 'Windows' atau 'Linux' atau 'Darwin' dengan menerapkan beberapa heuristik.
Pro: Cara portabel terbaik untuk Windows, OSX dan Linux.
Con: Orang-orang Python harus menjaga heuristik normalisasi tetap up to date.
Ringkasan
platform.system()
.posix
atau nt
gunakanos.name
.sys.platform
.Bagaimana dengan jawaban baru:
import psutil
psutil.MACOS #True (OSX is deprecated)
psutil.WINDOWS #False
psutil.LINUX #False
Ini akan menjadi output jika saya menggunakan MACOS
Saya mulai membuat daftar yang lebih sistematis tentang nilai-nilai apa yang dapat Anda harapkan menggunakan berbagai modul (jangan ragu untuk mengedit dan menambahkan sistem Anda):
os.name posix
sys.platform linux
platform.system() Linux
sysconfig.get_platform() linux-x86_64
platform.machine() x86_64
platform.architecture() ('64bit', '')
sys.platform
dengan versi kernel, mislinux2
, semua yang lain tetap identikplatform.architecture() = ('64bit', 'ELF')
(dengan kolom 32bit berjalan di subsistem 32bit)
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')
Beberapa komentar:
distutils.util.get_platform()
yang identik dengan `sysconfig.get_platformUntuk membandingkan dengan sistem Anda, cukup jalankan skrip ini (dan harap tambahkan hasil di sini jika ada :)
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())
Saya menggunakan alat WLST yang datang dengan weblogic, dan itu tidak mengimplementasikan paket platform.
wls:/offline> import os
wls:/offline> print os.name
java
wls:/offline> import sys
wls:/offline> print sys.platform
'java1.5.0_11'
Selain menambal sistem javaos.py ( masalah dengan os.system () pada windows 2003 dengan jdk1.5 ) (yang tidak bisa saya lakukan, saya harus menggunakan weblogic out of the box), inilah yang saya gunakan:
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)
Untuk Jython satu-satunya cara untuk mendapatkan nama os yang saya temukan adalah dengan memeriksa os.name
properti Java (dicoba dengan sys
, os
dan platform
modul untuk Jython 2.5.3 di 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
dalam nada yang sama ....
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")
Jika Anda tidak mencari versi kernel dll, tetapi mencari distribusi linux Anda mungkin ingin menggunakan yang berikut ini
di 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
dalam python2.4
>>> import platform
>>> print platform.dist()
('centos', '6.0', 'Final')
>>> print platform.dist()[0]
centos
>>> print platform.dist()[1]
6.0
Jelas, ini hanya akan berfungsi jika Anda menjalankan ini di linux. Jika Anda ingin memiliki lebih banyak skrip generik di seluruh platform, Anda dapat mencampurnya dengan contoh kode yang diberikan dalam jawaban lain.
coba ini:
import os
os.uname()
dan Anda dapat membuatnya:
info=os.uname()
info[0]
info[1]
os.uname()
tidak tersedia di windows: docs.python.org/2/library/os.html#os.uname Ketersediaan: rasa terbaru dari Unix.
Periksa tes yang tersedia dengan platform modul dan cetak jawabannya untuk sistem Anda:
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
Anda juga dapat menggunakan hanya modul platform tanpa mengimpor modul os untuk mendapatkan semua informasi.
>>> 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')
Tata letak yang bagus dan rapi untuk tujuan pelaporan dapat dicapai dengan menggunakan baris ini:
for i in zip(['system','node','release','version','machine','processor'],platform.uname()):print i[0],':',i[1]
Itu memberikan hasil ini:
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
Apa yang hilang biasanya adalah versi sistem operasi tetapi Anda harus tahu jika Anda menjalankan windows, linux atau mac cara platform independen adalah dengan menggunakan tes ini:
In []: for i in [platform.linux_distribution(),platform.mac_ver(),platform.win32_ver()]:
....: if i[0]:
....: print 'Version: ',i[0]
Saya tahu ini adalah pertanyaan lama tetapi saya percaya bahwa jawaban saya adalah salah satu yang mungkin dapat membantu beberapa orang yang mencari cara pythonic yang mudah dan sederhana untuk mendeteksi OS dalam kode mereka. Diuji pada 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
Jika Anda menjalankan macOS X dan menjalankan platform.system()
Anda mendapatkan darwin karena macOS X dibangun di atas OS Darwin milik Apple. Darwin adalah kernel dari macOS X dan pada dasarnya macOS X tanpa GUI.
Solusi ini berfungsi untuk keduanya python
dan jython
.
module 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>"
Gunakan seperti ini:
import os_identify
print "My OS: " + os_identify.name()
Bagaimana dengan implementasi Enum sederhana seperti berikut ini? Tidak perlu untuk lib eksternal!
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
Cukup Anda dapat mengakses dengan nilai Enum
if OS.LINUX.value:
print("Cool it is Linux")
PS Ini adalah python3
Anda dapat melihat kode pyOSinfo
yang merupakan bagian dari paket pip-date , untuk mendapatkan informasi OS yang paling relevan, seperti yang terlihat dari distribusi Python Anda.
Salah satu alasan paling umum orang ingin memeriksa OS mereka adalah untuk kompatibilitas terminal dan jika perintah sistem tertentu tersedia. Sayangnya, keberhasilan pengecekan ini agak tergantung pada instalasi python dan OS Anda. Misalnya, uname
tidak tersedia di sebagian besar paket python Windows. Program python di atas akan menunjukkan kepada Anda output dari fungsi built-in yang paling umum digunakan, sudah disediakan oleh os, sys, platform, site
.
Jadi cara terbaik untuk mendapatkan hanya kode penting adalah melihat bahwa sebagai contoh. (Saya kira saya bisa saja menempelkannya di sini, tetapi itu tidak benar secara politis.)
Saya terlambat ke permainan tetapi, kalau-kalau ada yang membutuhkannya, ini fungsi yang saya gunakan untuk membuat penyesuaian pada kode saya sehingga berjalan di Windows, Linux dan MacO:
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'