SORU
29 Aralık 2010, ÇARŞAMBA


Kullanmak için os.adı, sys.platform veya platform.sistem?

Bildiğim kadarıyla, Python sürümünü öğrenmenin 3 yolu vardır:

  1. os.name
  2. sys.platform
  3. platform.system()

Bilgi koşullu ithalatta genellikle yararlıdır bunu bilerek, ya da platformlar (Windows v. s. örneğin time.clock() arasında farklı işlevi kullanarak UNIX time.time()).

Benim sorum, 3 farklı yolu neden bunu yapıyor? Bir şekilde kullanılmalıdır ve bir başka değil mi? Ne tarafta 'en iyi (en geleceğe yönelik veya yanlışlıkla program aslında üzerinde çalışacak olan özel bir sistem dışlamak için en az)'?

Göründüğü gibi sys.platform daha çok belli os.name izin için ayırt win32 cygwin (karşıt olarak sadece nt) ve linux2 darwin (karşıt olarak sadece posix). Ama eğer bu olursa, ne sys.platform platform.system() arasındaki fark?

Hangisi daha iyidir, örneğin, bu:

import sys
if sys.platform == 'linux2':
    # Do Linux-specific stuff

ya bu? :

import platform
if platform.system() == 'Linux':
    # Do Linux-specific stuff

Şimdilik bu soru, özellikle acil değil sys.platform, sadık olacağım, ama bazı Açıklama Bu ilgili için çok minnettar olacaktır.

CEVAP
26 Temmuz 2012, PERŞEMBE


Kaynak kodu içine daldı.

sys.platform os.name çıkış derleme zamanında belirlenir. platform.system() zamanında sistem türünü belirler.

  • sys.platform bir derleyici oluşturmak yapılandırma sırasında tanımlamak belirtildi.
  • Bazı os özel modüller kullanılabilir olup olmadığını os.name (posix, nt, örneğin...) çekler
  • platform.system() aslında uname ve potansiyel olarak diğer bazı işlevleri zamanında sistem türünü belirlemek için çalışır.

Benim önerim, kullanın os.name olup olmadığını kontrol etmek için bir posıx uyumlu sistem kullanım sys.platform olup olmadığını kontrol etmek için bir linux, özellik listesi, darwin, atheos, ne olursa olsun, ve kullanmak platform.system(), madem inanmıyorsun diğer kaynaklar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alan Fullmer

    Alan Fullmer

    3 EYLÜL 2010
  • Matthew Smith

    Matthew Smit

    24 Mayıs 2010
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009