Отправляет email-рассылки с помощью сервиса Sendsay

За 2021-01-10

[prg] Re: Работа в консоли Python Nvda

Здравствуйте, Dmitriy.

> Как очистить консоль от результатов работы не перезапуская скринридер?

Боюсь, что никак. Консоль Python в NVDA - это инструмент отладки, а не
просто терминал для встроенного интерпретатора.
Там как бы одна рабочая сессия в течение рабочей сессии NVDA.
Вызов консоли в NVDA - это не запуск интерпретатора, а просто показ его
окна, так-то он один раз запускается с NVDA и потом с ней же завершается.

> То есть если даже закрыть консоль, потом снова её открыть, в тех же
> переменных будут храниться данные. Неужели очищать командой каждую
> переменную?

Так у вас тоже самое происходит и с обычным Python, когда вы работаете
внутри одной сессии.
Вообще-то в Python есть встроенный сборщик мусора, так что если на
какой-либо объект в коде не осталось ссылок, то он автоматически удаляется.
Ну или перемалывайте данные внутри функции/метода в переменных локальной
области видимости, если у вас какие-то проблемы с застреванием значений в
памяти.

> И ещё. Обычной, физической мышкой переместил курсор на результат работы
> и перешёл в редактор только для чтения, где стрелками можно ходить и
> видеть что ты вводил и то что выводилось в результате, случайно обратил
> на это внимание. А вот с клавиатуры как так сделать, понять теперь не
могу.

Циклично по F6.
Успехов. Никита.

   2021-01-10 18:24:02 (#3663569)

[prg] Re[3]: Отладчик для дополнений NVDA

Здравствуйте, Dmitriy.

> То есть типа как в консольном варианте дополнение запустить
> невозможно? Т.Е. чтоб не бегать каждый раз в журнал.

NVDA в принципе не консольное приложение, поэтому без GUI многие вещи просто
работать не будут. То есть их чисто в консоли не запустить.
Отладка работы идёт через журнал, подробность сообщений которого можно
настроить.
Вызовы print() в исполняющемся коде дополнения попадают в журнал. Также
можно вставлять вызовы raise, то есть инициировать исключение, которое
остановит исполнение в этой точке и запишет текст в журнал.

> Допустим основной код я напишу с обычным Python, но я ведь могу
> ошибиться в библиотеках NVDA.

Если у вас будет ошибка исполнения, то информацию о ней вы увидите в
журнале.
Если же у вас ошибка в логике работы, то обкладывайте код тестами или
отлаживайте на print'ах, то есть выводя через print() по ходу исполнения
сообщения с технической информацией и таким образом находя этап, на котором
что-то пошло не так.
В принципе, можно запустить NVDA из исходников и получить чуть больше
контроля за процессом исполнения, но это оправдано, если вы куда-то совсем
залезли в ядро NVDA.
Ещё NVDA может быть собрана в бинарном виде в режиме отладки, когда на
разные ошибки на будет явно подавать сигналы.
В принципе, достаточно просто взять какую-нибудь готовую бета-версию,
которая именно так и собрана.

> Можно ли перезапускать только одно дополнение?

В рамках стандартной функциональности NVDA нет.
Чисто теоретически можно написать свой собственный перезагрузчик конкретного
дополнения, почитав реализацию общей перезагрузки в исходниках NVDA. Точка
входа для поиска соответствующего скрипта в файле globalCommands.py, ну а
дальше уже смотреть по коду.
Однако с учётом необходимости в том числе сброса кэша динамически
создаваемых объектов это вряд ли задача, с которой стоит связываться.
Больше похоже на то, что у вас просто не очень эффективно построен рабочий
процесс, и лучше заняться его оптимизацией.
В частности, вызывает некоторые сомнения вся эта история с отладкой на
удалённой машине по NVDA Remote.

> Просто привык к чистому Python, к его консоли и моментальному выводу
> ошибок если таковые есть.

Такое впечатление, что вы занимаетесь разработкой чего-то за рамками
профильной функциональности NVDA.
То, что имеет смысл программировать на уровне дополнения NVDA, по сути в
подавляющем большинстве случаев должно быть так тесно связано со всем
окружением и интерфейсом NVDA, что именно в этом виде это и должно быть
наиболее удобно отлаживать.
Если же у вас просто некое стороннее Python-приложение, просто выдающее
результат своей работы в интерфейс NVDA, ну и всё это планируется запускать
на интерпретаторе Python, встроенном в NVDA, то тут появляются вопросы
оправданности такого архитектурного решения.
В любом случае, если у вас достаточно много кода, который реализует
абстрактную логику, никак не связанную с окружением NVDA, то аккуратно
вынесете его в отдельные модули с нейтральным API, ну и отлаживайте в
обычной консоли Python. Потом уже просто после отладки положите их в
дополнение и импортируете, а в NVDA отладьте только тонкую прослойку
интеграции этих модулей в окружение NVDA.

> Да, и ещё вопрос по отладке. Я сейчас работаю с интернет-базой данных. В
> обычном python я могу посмотреть что подгрузилось в переменные к примеру
> к сорок седьмой строке кода, с помощью команд "next", "step" и так
> далее. могу ли я узнать это в NVDA?

См. выше про уместность написания и запуска приложений общего назначения на
внутреннем Python-интерпретаторе NVDA.
Ну а вообще если запускать NVDA из исходников без компиляции, то возможно у
вас и получится сделать то, что вы хотите, то есть пошагово отладить
Python-код прямо в основном потоке исполнения NVDA.
Инструкцию с перечислением зависимостей и особенностями запуска NVDA из
исходников можно посмотреть в ReadMe её репозитория на GitHub.
Успехов. Никита.

   2021-01-10 18:23:04 (#3663568)

[prg] Работа в консоли Python Nvda

Приветствую.

Попробовал консоль nvda, Возможно странно, но появились вопросы.

Как очистить консоль от результатов работы не перезапуская скринридер?

То есть если даже закрыть консоль, потом снова её открыть, в тех же
переменных будут храниться данные. Неужели очищать командой каждую
переменную?

И ещё. Обычной, физической мышкой переместил курсор на результат работы
и перешёл в редактор только для чтения, где стрелками можно ходить и
видеть что ты вводил и то что выводилось в результате, случайно обратил
на это внимание. А вот с клавиатуры как так сделать, понять теперь не могу.

Если открыть консоль Python в Nvda, то стрелками я перемещаюсь только по
командам которые я вводил и это обычный редактор, в котором nvda не
читает результаты вывода. А так прикольно получилось, если кто знает
подскажите как перейти в такой режим с клавиатуры?

   2021-01-10 16:00:29 (#3663567)

[prg] Re[2]: Отладчик для дополнений NVDA

Понятно. То есть типа как в консольном варианте дополнение запустить
невозможно? Т.Е. чтоб не бегать каждый раз в журнал.

Допустим основной код я напишу с обычным Python, но я ведь могу
ошибиться в библиотеках NVDA.

И вот приблизительно из первого вопроса возник второй.

Можно ли как-то запускать дополнение так, чтобы не перегружать все
остальные дополнения.

Скорей всего я делаю не так, но я кладу дополнение в профиль NVDA туда
где оно и будет после установки и после каждой малейшей поправки в коде
нажимаю nvda+ctrl+f3. И это очень не удобно особенно если кто-то сидит
на удалёнке по NVDA remote.

Можно ли перезапускать только одно дополнение?

Может будет лучше импортировать библиотеки из nvda в чистый python и
работать так? Короче я не знаю, вот и интересуюсь как лучше сделать.
Просто привык к чистому Python, к его консоли и моментальному выводу
ошибок если таковые есть.

Да, и ещё вопрос по отладке. Я сейчас работаю с интернет-базой данных. В
обычном python я могу посмотреть что подгрузилось в переменные к примеру
к сорок седьмой строке кода, с помощью команд "next", "step" и так
далее. могу ли я узнать это в NVDA?

То есть даже если я подключу библиотеку отладчика в NVDA, как я это
посмотрю если Nvda в консоли ничего не показывает?

   2021-01-10 15:59:59 (#3663566)

[prg] Re: Отладчик для дополнений NVDA

Здравствуйте, Dmitriy.

> На чистом Python всё работает, через дополнение нет. Пытаюсь сделать
> типа такое:

> mylist = [abc, defg, 12345, wxyz]
> indexlist = mylist[0]
> ui.message(indexlist)

> И тишина.

На чистом Python этот код точно работать не будет, потому что там нет модуля
ui.
Ну а в NVDA этот код в принципе должен работать, но как часть чего-то
большего. Если это код из дополнения, то надо смотреть на остальную часть.
Если из консоли Python в NVDA, то надо определиться с переменными или
литералами в списке и убедиться, что импортирован модуль ui.
Однако в консоли Python в NVDA есть нюанс, из-за которого ui.message() там
использовать не стоит, а лучше использовать стандартную функцию print().
Просто сообщение ui.message() прерывается сообщением чтения объявления для
ввода новой строки, когда эта строчка дописывается в окне редактора.
То есть ui.message() в консоли Python отрабатывает, но тут же перебивается
новым сообщением, так что обычно там этого не слышно.

> И ещё, есть ли что-нибудь такое, чтобы когда запускаешь дополнение по
> горячей клавише, в случае возникновения ошибки или исключения, это
> показывалось бы?

Эти сообщения попадают в журнал NVDA, который можно просмотреть по команде
NVDA+F1.
Также можно открыть файл %tmp%\nvda.log
Если сбой произошёл в предыдущей рабочей сессии NVDA, то смотреть надо файл
%tmp%\nvda-old.log
Успехов. Никита.

   2021-01-10 03:13:57 (#3663560)