Модуль Python win32com на Linux


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

Однако эти строки не будут работать в среде Linux:

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

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

1 3

1 ответ:

Используйте a 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 модуль , чтобы сообщить пользователю, что некоторые функции/функции недоступны.

В качестве альтернативы можно использовать 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'), или платформа .архитектура (которая могла бы равняться таким вещам, как ('32bit', 'ELF').)