2010-08-16 26 views
73

Trong chương trình của tôi, tôi muốn nhập simplejson hoặc json dựa trên việc hệ điều hành mà người dùng đang sử dụng là Windows hay Linux. Tôi lấy tên hệ điều hành làm đầu vào từ người dùng. Bây giờ, nó là chính xác để làm như sau?Nhập khẩu có điều kiện các mô-đun trong Python

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

vâng này là chính xác. – akonsu

+25

Tại sao bạn lấy tên os làm đầu vào từ người dùng? Nhìn vào mô-đun nền tảng. http://docs.python.org/library/platform.html 'platform.platform()' hoặc 'platform.system()' nên làm những gì bạn cần, thay vì phải có người dùng phải nhập nội dung nào đó mỗi lần mã chạy. –

+3

-1: yêu cầu người dùng cho hệ điều hành. –

Trả lời

35

Hoàn toàn chính xác, rất nhiều gói thực hiện việc này. Có lẽ tốt hơn là nên tự mình tìm ra hệ điều hành thay vì dựa vào người dùng; Đây là pySerial làm nó như một ví dụ.

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

Không, rất khó để mã hóa tên hệ điều hành để quyết định xem có 'simplejson' hoặc' json' không. Bạn đang trích dẫn mã từ nhập * vốn có hệ điều hành cụ thể *, đây là trường hợp rất khác. Xem câu trả lời của Matt cho cách tiếp cận chính xác. –

+10

@Glenn Maynard: Tôi sẽ trì hoãn bạn; Tôi chưa bao giờ sử dụng gói 'json' và đang cố gắng trả lời câu hỏi" bạn có thể làm điều kiện nhập khẩu có điều kiện "chung hơn. –

125

Tôi đã nhìn thấy thành ngữ này được sử dụng rất nhiều, do đó bạn thậm chí không cần phải làm OS sniffing:

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

Trước tiên, bạn nên thử nhập 'simplejson as json' vì nó có thể là phiên bản mới hơn (nhanh hơn) của mô đun' json' chuẩn. –

+0

hoặc '' 'ujson''' cho tốc độ – lababidi

3

Nó không phải là khuyến khích sử dụng để ràng buộc json hoặc simplejson với nền tảng hệ điều hành. simplejson là phiên bản mới hơn và nâng cao của json nên chúng ta nên thử nhập nó trước.

Dựa trên phiên bản python bạn có thể thử bên dưới cách nhập json hoặc simplejson

import sys 
if sys.version_info > (2, 7): 
    import simplejson as json 
else: 
    import json 
Các vấn đề liên quan