2010-08-16 21 views
73

Programımda, kullanıcı üzerinde işletim sisteminin Windows veya Linux olup olmadığına bağlı olarak simplejson veya json'u aktarmak istiyorum. OS adını kullanıcıdan girdi olarak alıyorum. Şimdi, aşağıdakileri yapmak doğru mu?Python'daki modüllerin koşullu olarak içe aktarılması

osys = raw_input("Press w for windows,l for linux") 
if (osys == "w"): 
    import json as simplejson 
else: 
    import simplejson 
+2

evet bu doğru içe aktarmak şekilde aşağıda deneyebilirsiniz. – akonsu

+25

Neden os adı kullanıcıdan girdi alıyorsunuz? Platform modülüne bakın. http://docs.python.org/library/platform.html 'platform.platform()' veya 'platform.system()', bir kullanıcının kod her girdiğinde bir şey girmek zorunda kalması yerine, ihtiyacınız olanı yapmalıdır. koşmak. –

+3

-1: Kullanıcıya işletim sistemi sorma. –

cevap

35

Bu işlemi doğru bir şekilde yapın, tonlarca paket bunu yapın. Kullanıcıya güvenmek yerine işletim sistemini kendiniz tanımlamak daha iyi olabilir; İşte bir örnek olarak pySerial yapıyor.

serial/__init__.py

import sys 

if sys.platform == 'cli': 
    from serialcli import * 
else: 
    import os 
    # chose an implementation, depending on os 
    if os.name == 'nt': #sys.platform == 'win32': 
     from serialwin32 import * 
    elif os.name == 'posix': 
     from serialposix import * 
    elif os.name == 'java': 
     from serialjava import * 
    else: 
     raise Exception("Sorry: no implementation for your platform ('%s') available" % os.name) 
+7

Hayır, “Simplejson” veya “json” un kullanılabileceğine karar vermek için işletim sistemi isimlerini kodlamak çok yanlış. Çok farklı bir durum olan * işletim sistemine özgü * ithalattan kod alıntılıyorsunuz. Doğru yaklaşım için Matt'in cevabına bakınız. –

+10

@Glenn Maynard: Size o zaman erteleyeceğim; Ben json' paketini hiç kullanmadım ve daha genel olanı cevaplamaya çalışıyordum “şartlı modül modülleri yapabilir misin?” Sorusu. –

125

ben bile OS koklama yapmak zorunda kalmamak için bu deyim, çok kullanılan gördüm:

try: 
    import json 
except ImportError: 
    import simplejson as json 
+14

İlk olarak 'jjson' json 'modülünün standart (json) modülünün daha yeni (daha hızlı) bir versiyonu olarak almayı denemelisiniz. Hız için –

+0

veya '' 'ujson''' – lababidi

3

O json bağlamak için kullanmak tavsiye edilmez OS platformu ile basit veya. simplejson, json'un daha yeni ve gelişmiş versiyonudur, bu yüzden önce onu almayı denemeliyiz.

piton sürümü dayanarak, json veya simplejson

import sys 
if sys.version_info > (2, 7): 
    import simplejson as json 
else: 
    import json 
İlgili konular