เท่าที่ฉันรู้ Python มี 3 วิธีในการค้นหาว่าระบบปฏิบัติการใดกำลังทำงานอยู่:
os.name
sys.platform
platform.system()
การทราบข้อมูลนี้มักมีประโยชน์ในการนำเข้าแบบมีเงื่อนไขหรือการใช้ฟังก์ชันการทำงานที่แตกต่างกันระหว่างแพลตฟอร์มต่างๆ (เช่นtime.clock()
บน Windows เทียบtime.time()
กับ UNIX)
คำถามของฉันคือทำไมถึงทำสิ่งนี้ได้ 3 วิธี ควรใช้วิธีใดวิธีหนึ่งไม่ใช่วิธีอื่น วิธีใดเป็นวิธีที่ 'ดีที่สุด' (การพิสูจน์ในอนาคตส่วนใหญ่หรือโอกาสน้อยที่สุดที่จะยกเว้นระบบใดระบบหนึ่งซึ่งโปรแกรมของคุณสามารถทำงานได้โดยไม่ได้ตั้งใจ)
ดูเหมือนว่าsys.platform
จะเฉพาะเจาะจงมากกว่าos.name
ทำให้คุณสามารถแยกแยะwin32
จากcygwin
(ตรงข้ามกับ just nt
) และlinux2
จากdarwin
(ตรงข้ามกับ justposix
) แต่ถ้าเป็นเช่นนั้นแล้วความแตกต่างระหว่างsys.platform
และplatform.system()
ล่ะ?
ตัวอย่างเช่นซึ่งดีกว่าสิ่งนี้:
import sys
if sys.platform == 'linux2':
# Do Linux-specific stuff
หรือนี่? :
import platform
if platform.system() == 'Linux':
# Do Linux-specific stuff
สำหรับตอนนี้ฉันจะยึดมั่นsys.platform
ดังนั้นคำถามนี้จึงไม่เร่งด่วนเป็นพิเศษ แต่ฉันจะขอบคุณมากสำหรับคำชี้แจงเกี่ยวกับเรื่องนี้
sys.platform.startswith('linux')
แทนsys.platform == 'linux2'
เพื่อความเข้ากันได้ในอนาคต