2014-01-04 7 views
3

Я пишу код Python, который работает под несколькими платформами. К сожалению, в Win32 я должен поддерживать некоторые функциональные возможности COM.Модуль Python win32com в Linux

Однако эти линии будут разрушаться под среде Linux:

from pythoncom import PumpWaitingMessages 
from pythoncom import Empty 
from pythoncom import Missing 
from pythoncom import com_error 
import win32api 

И все другие функции, использующие Win32 COM API не получится, как хорошо. Каков стандартный метод, чтобы убедиться, что какой-либо код не загружается/импортируется в зависимости от платформы и не дает сообщение об ошибке/исключение в том случае, если они вызываются клиентом интерфейса?

ответ

3

Используйте try..except ImportError:

try: 
    from pythoncom import PumpWaitingMessages 
    from pythoncom import Empty 
    from pythoncom import Missing 
    from pythoncom import com_error 
    import win32api 
except ImportError: 
    # handle exception 

Что делать, если есть исключение до вас. Вы можете добавить код, специфичный для Linux, который предоставляет аналогичный интерфейс, или вы можете использовать warnings module, чтобы сообщить пользователю, что некоторые функции/функции недоступны.


В качестве альтернативы, вы можете использовать if-statement на основе стоимости sys.platform:

import sys 
if sys.platform == "win32": 
    ... 
elif sys.platform == 'cygwin': 
    ... 
elif sys.platform[:5] == 'linux': 
    ... 
elif sys.platform == 'darwin': 
    ... 
else: 
    ... 

Другие ценности, которые могут иметь важное значение для кросс-платформенного кода может быть os.name (который может равняться 'posix', 'nt', 'os2', 'ce', 'java', 'riscos'), или platform.architecture (что могло бы соответствовать таким вещам, как ('32bit', 'ELF').)

+2

Это решает импорт, но функции, которые используют импорт, по-прежнему будут терпеть неудачу, не так ли? – BlueTrin

+2

Функции, зависящие от Windows, должны быть помещены внутри 'try-suite'. Аналогичные функции, специфичные для Linux, должны быть помещены в 'except-suite'. – unutbu

+0

Спасибо, это здорово, я попробую это как можно скорее. – BlueTrin