Apa yang perlu saya lihat untuk melihat apakah saya menggunakan Windows atau Unix, dll?
python
cross-platform
platform-specific
platform-agnostic
Mark Harrison
sumber
sumber
Jawaban:
Outputnya
platform.system()
adalah sebagai berikut:Linux
Darwin
Windows
Lihat:
platform
- Akses ke data pengenal platform yang mendasarinyasumber
platform
lebihsys.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.htmlAvailability: recent flavors of Unix.
Dang - lbrandy mengalahkan saya, tapi itu tidak berarti saya tidak bisa memberi Anda hasil sistem untuk Vista!
... dan saya tidak percaya belum ada yang diposting untuk Windows 10:
sumber
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:
sumber
platform.release()
pengembalian'19.2.0'
Kode sampel untuk membedakan OS menggunakan python:
sumber
Anda juga dapat menggunakan
sys.platform
jika Anda sudah mengimporsys
dan Anda tidak ingin mengimpor modul lainsumber
Jika Anda ingin data yang dapat dibaca pengguna tetapi masih detail, Anda bisa menggunakannya platform.platform ()
Berikut beberapa kemungkinan panggilan yang dapat Anda buat untuk mengidentifikasi di mana Anda berada
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:
sumber
DeprecationWarning: dist() and linux_distribution() functions are deprecated in Python 3.5
Cerita pendek
Gunakan
platform.system()
. Itu kembaliWindows
,Linux
atauDarwin
(untuk OSX).Cerita panjang
Ada 3 cara untuk mendapatkan OS di Python, masing-masing dengan pro dan kontra sendiri:
Metode 1
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
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
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
ataunt
gunakanos.name
.sys.platform
.sumber
Bagaimana dengan jawaban baru:
Ini akan menjadi output jika saya menggunakan MACOS
sumber
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):
Linux (64bit) + WSL
sys.platform
dengan versi kernel, mislinux2
, semua yang lain tetap identikplatform.architecture() = ('64bit', 'ELF')
WINDOWS (64bit)
(dengan kolom 32bit berjalan di subsistem 32bit)
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 :)
sumber
Saya menggunakan alat WLST yang datang dengan weblogic, dan itu tidak mengimplementasikan paket platform.
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:
sumber
/usr/bin/python3.2
sumber
Untuk Jython satu-satunya cara untuk mendapatkan nama os yang saya temukan adalah dengan memeriksa
os.name
properti Java (dicoba dengansys
,os
danplatform
modul untuk Jython 2.5.3 di WinXP):sumber
Hasil menarik di windows 8:
Sunting: Itu bug
sumber
Hati-hati jika Anda berada di Windows dengan Cygwin mana
os.name
adalahposix
.sumber
dalam nada yang sama ....
sumber
Jika Anda tidak mencari versi kernel dll, tetapi mencari distribusi linux Anda mungkin ingin menggunakan yang berikut ini
di python2.6 +
dalam python2.4
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.
sumber
coba ini:
dan Anda dapat membuatnya:
sumber
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:
sumber
Anda juga dapat menggunakan hanya modul platform tanpa mengimpor modul os untuk mendapatkan semua informasi.
Tata letak yang bagus dan rapi untuk tujuan pelaporan dapat dicapai dengan menggunakan baris ini:
Itu memberikan hasil ini:
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:
sumber
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
sumber
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.sumber
Solusi ini berfungsi untuk keduanya
python
danjython
.module os_identify.py :
Gunakan seperti ini:
sumber
Bagaimana dengan implementasi Enum sederhana seperti berikut ini? Tidak perlu untuk lib eksternal!
Cukup Anda dapat mengakses dengan nilai Enum
PS Ini adalah python3
sumber
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 olehos, 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.)
sumber
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:
sumber