Bagaimana cara memeriksa sistem operasi dengan Python?

148

Saya ingin memeriksa sistem operasi (di komputer tempat skrip berjalan).

Saya tahu saya bisa menggunakan os.system('uname -o')di Linux, tetapi itu memberi saya pesan di konsol, dan saya ingin menulis ke variabel.

Tidak masalah jika skrip dapat mengetahui apakah itu Mac, Windows atau Linux. Bagaimana saya bisa memeriksanya?

kolek
sumber
1
Kemungkinan duplikat Python: OS apa yang saya jalankan?
TylerH

Jawaban:

287

Anda bisa menggunakan sys.platform:

from sys import platform
if platform == "linux" or platform == "linux2":
    # linux
elif platform == "darwin":
    # OS X
elif platform == "win32":
    # Windows...

sys.platformmemiliki granularity lebih halus dari sys.name.

Untuk nilai yang valid, lihat dokumentasi .

Lihat juga jawaban untuk "OS apa yang saya jalankan?"

serigala
sumber
8
Perhatikan bahwa dalam cygwin, itu "cygwin"tidak kembali "win32"seperti yang diharapkan seseorang.
Michał Bentkowski
21
Terima kasih. Apa perbedaan antara linux dan linux2?
Tharindu Rusira
1
apa yang akan menjadi output untuk BSD?
galois
1
Perhatikan bahwa sejak Python 3.3, "linux2"tidak ada lagi nilai yang mungkin dari platform(lihat dokumen tertaut untuk bukti yang menguatkan) dan jadi jika Anda hanya perlu mendukung Python 3.3 dan kemudian Anda dapat dengan aman menghapus klausul `atau platform ==" linux2 "` dari kondisi pertama.
Mark Amery
23

Jika Anda ingin tahu di platform mana Anda berada di luar dari "Linux", "Windows", atau "Darwin" (Mac), tanpa lebih presisi, Anda harus menggunakan:

>>> import platform
>>> platform.system()
'Linux'  # or 'Windows'/'Darwin'

The platform.systemFungsi menggunakan unameinternal.

Laurent LAPORTE
sumber
1
Saya suka solusi ini, tetapi saya ingin menunjukkan bahwa dari dokumentasi itu menyatakan bahwa ia akan kembali Linux, Windows, Javaatau string kosong. devdocs.io/python ~ 3.7
Brandon Benefield
2
@BrandonBenefield, enumerasi adalah contoh dari nilai yang mungkin. Di perangkat Apple, ia mengembalikan "Darwin".
Laurent LAPORTE
15

Anda bisa mendapatkan gambaran OS yang Anda gunakan dengan cara mengeceknya sys.platform.

Setelah Anda memiliki informasi itu, Anda dapat menggunakannya untuk menentukan apakah memanggil sesuatu seperti os.uname()itu tepat untuk mengumpulkan informasi yang lebih spesifik. Anda juga dapat menggunakan sesuatu seperti Informasi Sistem Python pada OS seperti unix, atau pywin32 untuk Windows.

Ada juga psutil jika Anda ingin melakukan pemeriksaan lebih mendalam tanpa ingin peduli dengan OS.

Nick Bastin
sumber
6

Informasi lebih rinci tersedia di platformmodul .

Sven Marnach
sumber
Apakah platformmodul memiliki kelebihan dibandingkan sys.platform? Kapan saya ingin menggunakan pendekatan mana?
matth
@matth: Anda mendapatkan informasi yang lebih terperinci dan terstruktur dari platformmodul. Cukup klik tautan untuk dokumentasi.
Sven Marnach