Python на Symbian

On: 4 ноября 2010 г.

Наконец то я добрался и до Symbian. Давно слышал о возможности использовать Python на платформе S60 операционной системы Symbian. Установить PythonScriptShell на смартфон оказалось довольно таки просто. Достаточно было определить версию платформы и скачать необходимый  PythonScriptShell. Но после этого начались свои заморочки. Самая первая это то что на телефоне сценарии питона помещаются в его папку. И об отдельном запуске как более или менее самостоятельного приложения и речи быть не может. Для подобных целей необходимо собирать sis пакеты. И тут началось....

Дело обстоит так что для версий Symbian ниже 9 пакеты sis собирать на windows проще чем на linux. Для этого необходима утилита py2sis, которая хоть и написана на питоне но использует windows  приложения для создания пакетов sis. Продолжительных скитаний по интернету нашел утилиту ensymble, которая есть в репозиториях Debian GNU/Linux но она создает sis файлы для версий Symbian выше 9.
Я уже потерял всякие надежды о комфортном запуске приложений, да и подработка параллельно работы меня вымотала. Но когда появилось немного свободного времени и вдохновения я приступил к чтению одного занятного чтива. В процессе прочтения я открыл для себя процедуру start_server() в составе модуля e32. Но эта процедура запускает приложение, которое в дальнейшем не может использовать модуль appuifw. Это ставит крест графическом интерфейсе и собственно эта процедура подходит для запуска сервисных приложений. Я стал искать замену этой процедуре и нашел решение. Сценарии питона можно запускать через execfile().

Рецепт запуск сценариев Python на Symbian на лету без установок и копирования в папку Python.

Я поступил так как мне советовали раньше но со своими дополнениями. Все файлы питона на телефоне ассоциируются с приложением  appmrg. Это приложение написано на Python и запускаясь предлагает определить тип файла (приложение или модуль), после чего оно копирует сценарий питона в папку my рабочего каталога Python. Для запуска же неоходимо запустить  интерпретатор Python и выбрать в меню Run script. 
Появиться список всех доступных скриптов скопированы в рабочий каталога Python. Как я и писал раньше это неудобно. В сети мне посоветовали расскоментировать две строки в файле программы c:\system\Apps\appmgr\default.py(питон у меня стоит на диске с).
Как я писал выше я узнал о возможностях процедур start_server() и execfile(). И решил поэксперементировать. Я добавил эти пункты меню в файл c:\system\Apps\appmgr\default.py. И теперь запуская сценарий питона на своем телефоне я получаю вот такое окошко

У меня есть выбор между:
  • Запуском приложения
  • Запуск приложения в качестве сервиса
  • Установкой приложения
  • Копированием его в папку Python




Необходимо в процедуре run переписать несколько строк. Вот мой пример:
else:
            actions = [lambda: execfile(filename), # запустить скрипт на выполнение
                        lambda: e32.start_server(filename), # запустить скрипт как сервис
                        lambda: script_install(filename), # стандартное. установить скрипт (скопировать)
                       lambda: standalone_install(filename), # установить как приложение (стандартное комментированное)
                       lambda: lib_install(filename)] # стандартное. установить модуль (скопировать)
            menu = [u"Run",
                    u"Start_Server",
                    u"Python script",
                    u"Standalone app",
                    u"Python lib module"]

        index = appuifw.popup_menu(menu, u"")
        try:
            if not index == None:
                appuifw.app.exit_key_handler = exit_wait
                e32.ao_yield()
                actions[index]()
                if index > 1: #что бы сообщение об установке не выводилось если я запускаю программу
                    appuifw.note(u"Installation complete", "info")
        finally:
            appuifw.app.exit_key_handler = None
            if should_exit:
                appuifw.app.set_exit()



Теперь я получи то что хотел. Запускать мои программы написанные на Python на смартфоне стало не только быстро но и практично. При этом отсутствует процедура сборки sis пакета. Все в духе питона. Быстрая и гибкая разработка.

Работа с Bluetooth console

Набирать приложения на телефоне очень неудобно и долго. Да и интерактивный режим тоже не слишком удобен при вводе с клавиатуры телефона. Для более или менее удобного ознакомления с возможностями Python на Symbian и пробного программирования может пригодиться такая функция интерпретатора Python как Bluetooth console. Она позволяет подключаться к последовательному порту через Bluetooth соединение. В операционных системах GNU/Linux при наличии пакета bluez необходимо сделать следующее (оригинал):
добавляем к вашему устройству bluetooth сервис последовательный порт (Serial Port):

# sdptool add-channel=2 SP

Одноразово. Питон по умолчанию ищет последовательный порт именно на втором канале(каждый сервис имеет свой канал). Перед соединение открываем порт на прослушку:

# rfcomm listen rfcomm2 2

Что бы открыть порт в фоновом режиме используйте:

# rfcomm listen rfcomm2 2 &

В любом случае это необходимо делать каждый раз перед ем как вы собираетесь соединяться по последовательному порту. После отключения эту команду необходимо прописывать снова. Теперь на телефоне запускаем Python и выбираем пункт Bluetooth console. После подтверждения питона об удачном подключении на компьютере в терминате прописываем:

screen /dev/rfcomm2

На этом все. Скажу еще что для работы с Bluetooth console на Windows можно воспользоваться стандартной программой HyperTerminal.

На последок: Я только начинаю разбираться с программированием на платформе Symbian с помощью языка программирования Python. В дальнейшем буду выкладывать статьи с описанием некоторых полезных программ и возможностей самого языка на этой платформе и вообще. Долго думал выкладывать ли здесь перечень полезных ссылок, но это было бы глупо потому что даже просто введя слова Python, Symbian в поисковик вы получите массу информации. Желаю удачи. Будут вопросы пишите в комментарий.

0 коммент. on "Python на Symbian"