ฉันจะตรวจสอบระบบปฏิบัติการใน Python ได้อย่างไร


148

ฉันต้องการตรวจสอบระบบปฏิบัติการ (บนคอมพิวเตอร์ที่สคริปต์ทำงาน)

ฉันรู้ว่าฉันสามารถใช้งานos.system('uname -o')บน Linux ได้ แต่มันทำให้ฉันมีข้อความในคอนโซลและฉันต้องการเขียนถึงตัวแปร

มันจะไม่เป็นไรถ้าสคริปต์สามารถบอกได้ว่าเป็น Mac, Windows หรือ Linux ฉันจะตรวจสอบได้อย่างไร



คำตอบ:


287

คุณสามารถใช้sys.platform:

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

sys.platformsys.nameมีเมล็ดปลีกย่อยกว่า

สำหรับค่าที่ถูกต้องให้ปรึกษาเอกสาร

ดูคำตอบของ“ ฉันกำลังใช้ระบบปฏิบัติการอะไรอยู่”


8
โปรดทราบว่าใน cygwin จะ"cygwin"ไม่ส่งคืน"win32"ตามที่ใครบางคนอาจคาดหวัง
Michał Bentkowski

21
ขอบคุณ ความแตกต่างระหว่าง linux และ linux2 คืออะไร?
Tharindu Rusira

1
ผลลัพธ์ของ BSD จะเป็นอย่างไร
galois

1
โปรดทราบว่าตั้งแต่ Python 3.3 "linux2"จะไม่มีค่าที่เป็นไปได้อีกต่อไปplatform(ดูเอกสารที่เชื่อมโยงสำหรับการยืนยัน) และดังนั้นหากคุณต้องการรองรับ Python 3.3 และใหม่กว่าคุณสามารถลบประโยค `หรือแพลตฟอร์ม ==" linux2 "` ได้อย่างปลอดภัยจาก เงื่อนไขแรก
Mark Amery

23

หากคุณต้องการทราบว่าแพลตฟอร์มใดที่คุณไม่ใช้ "Linux", "Windows" หรือ "Darwin" (Mac) โดยไม่มีความแม่นยำมากขึ้นคุณควรใช้:

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

platform.systemการใช้ฟังก์ชั่นunameภายใน


1
ผมชอบวิธีนี้ แต่ผมอยากจะชี้ให้เห็นว่าจากเอกสารที่ระบุว่าจะกลับมาLinux, Windows, Javaหรือสตริงที่ว่างเปล่า devdocs.io/python~3.7/library/platform#platform.system
Brandon Benefield

2
@BrandonBenefield การแจงนับเป็นตัวอย่างของค่าที่เป็นไปได้ บนอุปกรณ์ Apple จะส่งคืน“ ดาร์วิน”
Laurent LAPORTE

15

sys.platformคุณจะได้รับความคิดที่หยาบสวยของระบบปฏิบัติการที่คุณกำลังใช้โดยการตรวจสอบ

เมื่อคุณมีข้อมูลที่คุณสามารถใช้เพื่อตรวจสอบว่าการโทรบางอย่างเช่นos.uname()มีความเหมาะสมในการรวบรวมข้อมูลที่เฉพาะเจาะจงมากขึ้น คุณสามารถใช้บางอย่างเช่นPython System Informationบนระบบปฏิบัติการยูนิกซ์หรือpywin32สำหรับ Windows

นอกจากนี้ยังมีpsutilหากคุณต้องการทำการตรวจสอบในเชิงลึกมากขึ้นโดยไม่ต้องการดูแลระบบปฏิบัติการ


6

รายละเอียดเพิ่มเติมข้อมูลที่มีอยู่ในโมดูลplatform


ที่ไม่platformโมดูลมีความได้เปรียบมากกว่าsys.platform? เมื่อใดที่ฉันต้องการใช้วิธีการใด
59

@matth: คุณได้รับข้อมูลที่มีรายละเอียดมากขึ้นจากplatformโมดูล เพียงคลิกที่ลิงค์สำหรับเอกสาร
Sven Marnach

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.