2015-03-17 4 views
2

Я пытаюсь использовать socket.AF_BLUETOOTH, как описано здесь: https://docs.python.org/3.3/library/socket.htmlОтсутствует socket.AF_BLUETOOTH в Anaconda Python?

У меня есть Python 3.3.5 :: Anaconda 2.1.0 (x86_64) на Mac OS X 10.10.2

и модуля гнезда как представляется, не содержит ссылки AF_BLUETOOTH:

In [1]: import socket 
In [2]: socket.AF 
socket.AF_APPLETALK socket.AF_INET  socket.AF_IPX  socket.AF_SNA  socket.AF_UNIX  
socket.AF_DECnet  socket.AF_INET6  socket.AF_ROUTE  socket.AF_SYSTEM  socket.AF_UNSPEC  

Может кто-нибудь помочь?

ответ

0

документы говорят:

В зависимости от системы и параметров создания различных сокетов семья поддерживается этим модулем.

И от этого бита в Modules/socketmodule.c:

#if (defined(HAVE_BLUETOOTH_H) || defined(HAVE_BLUETOOTH_BLUETOOTH_H)) && !defined(__NetBSD__) && !defined(__DragonFly__) 
#define USE_BLUETOOTH 1 

вы хотите, чтобы убедиться, что HAVE_BLUETOOTH_H и USE_BLUETOOTH получить истинна во время компиляции. Вы можете проверить свои текущие настройки с помощью:

import sysconfig 
print sysconfig.get_config_vars()['HAVE_BLUETOOTH_H'] 

Я предполагаю, что возвращает 0 для вас в настоящее время. Подсказка от pyconfig.h.in:

/* Define to 1 if you have the <bluetooth/bluetooth.h> header file. */ 
#undef HAVE_BLUETOOTH_BLUETOOTH_H 

так что вы должны убедиться, что bluetooth/bluetooth.h заголовочный файл присутствует в системе и доступны в вашем пути поиска во время компиляции.

+1

Я был уязвлен этим сам ... Если вы используете Ubuntu/Debian, тогда вам нужно будет установить пакет libbluetooth-dev перед компиляцией python. –

+0

Я на OSX 10.10.2 – Fra

+0

@Josh Kupershmidt: он возвращает 0 в моем случае. Должен ли я скомпилировать python из источника для его решения? – Fra

1

PF_BLUETOOTH - семейство протоколов, реализованное модулем Bluetooth bluetooth (от BlueZ). В Linux вы создаете сокет L2CAP и используете системные вызовы сокетов для связи с устройством (подключение, привязка, чтение, запись), а адреса имеют семейство адресов AF_BLUETOOTH. Но это тип сокета только для Linux.

На Mac вам необходимо использовать CoreBluetooth API (который использует сообщения XPC для blued-демона) вместо этого для связи с устройством Bluetooth LE.

Я не знаю об оболочке Python для CoreBluetooth на OS X, но если вы хотите посмотреть, как это может выглядеть, обратитесь к библиотекам node.js bleno или noble. Фактически эти библиотеки используют внутренние сообщения XPC, которые могут быть не слишком стабильными, а не публичным API.