0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
1 | |
RunProgram and #PB_Program_Error17.11.2021, 21:59. Показов 4115. Ответов 23
Метки нет (Все метки)
Приветствую!
Столкнулся с проблемой контроля вывода ошибок от консольного приложения. Имеется какое то ограничение по длине, парсю в цикле, но если длина больше определённой, то программа на пьюрике, тормозит консольную утилиту наглухо... Причем даже если не парсю, а просто при запуске имеется константа #PB_Program_Error, консольная программа зависает, если отдаёт слишком много данных... Вопрос: Есть какое то ограничение считывания вывода ошибок stderr в пьюрбейсике В сmd то всё отображается корректно (без пьюрика)
0
|
17.11.2021, 21:59 | |
Ответы с готовыми решениями:
23
RunProgram Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
COM‐пропагандист
|
|
18.11.2021, 13:53 | 2 |
Когда создаёте процесс и указываете какую‐нибудь константу #PB_Program_, то среда исполнения перенаправляет трубопровод к вам. Программа по ту сторону трубопроводов вызывает WriteFile на стандартный поток и ждёт когда байты будут прочитаны.
Логично, что вы должны выбрать что‐то одно: * прочитать эти данные * не перенаправлять трубопровод, то есть не указывать #PB_Program_Error * закрыть трубопровод (в PureBasic вы не можете закрыть конкретный трубопровод, вы можете только закрыть всю программу через СloseProgram(), но тогда зачем открывали, если не собираетесь читать).
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 14:13 [ТС] | 3 |
Замабувараев, Спасибо, но это не ответ на мой вопрос.
Хотя... Вопрос был в том, если ограничения чтения буфера ошибок, так как выше определённого, он не читается... И можно это как то обойти используя WinAPI...
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 14:33 [ТС] | 5 |
Замабувараев, Пытался несколькими способами, да хоть Debug ReadProgramError(iPid)
Хотя у меня в коде считывается в цикле. Но я отключал эту функцию... Добавлено через 7 минут Походу не ждёт.. Убираю из кода считывание данных stderr, но оставляю константу в строке запуска #PB_Program_Error если буфер ошибок небольшой (выводится мало инфы), то всё завершается удачно, если большой, то консольная утиль виснет...
0
|
18.11.2021, 16:34 | 6 |
для #PB_Program_Error в справке написано что не приостанавливает. На сколько я понимаю есть 3 потока, утиль пишет в поток передачи данных (назовём пока так не цепляясь за аббревиатуры) и также пишет в поток ошибок. Когда прога считывает данные, она также читает поток ошибок, а уже юзер определяет читать ли поток данных дальше, если прога выдала в поток ошибок ошибки. То есть чтение данных работает как приостановка программы, оно не даёт напрячь проц на максималку, так как ждёт от проги новые данные. Если этого потока нет, а в потоке ошибок нет ожиданий, то и результат наверно всё виснет потому что прога приёмник пытается миллиард раз в микросекунду читать поток ошибок. Конечно всё зависнет. Поток ошибок является сопровождением потока данных и валидностью данных.
0
|
|
||||||
18.11.2021, 16:37 | 7 | |||||
Вы бы выложили если не кусок реального кода, то хотя бы его прототип, на котором видно структуру кода.
Например так:
1
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
||||||
18.11.2021, 18:03 [ТС] | 8 | |||||
Pro_grammer, ReadProgramError(Process) мне приходится не единожды запускать в цикле, пока не получу все строки... но дело в том, что до этого не доходит, если данных много..
с примером всё сложно... так как нужно писать какую то свою консольную утилиль на Ascii которая выдаёт много данных в поток... код опроса у меня такой:
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 19:01 [ТС] | 10 |
Замабувараев, Не моя программа, а консольная, при отправке stderr в мою прогу на пьюрике.
И только если много данных отправляет.. Если мало, то всё ок Если я закрою свою прогу, то и консольная отвисает.
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 20:31 [ТС] | 12 |
Замабувараев, вывода инфы нет.... просто виснит консольная, а моя прога ждёт...
Вот я думаю, что может виной запущенный cmd из моей программы и нужно попробовать запускать консольную утилиту напрямую... Добавлено через 11 минут Убрал запуск через cmd, такая же проблема... Если данных в stderr много, то программа на пьюрике не может их принять и тормозит консольное приложение... Если закрыть консольное приложение, данные не поступают Если закрыть программу на пьюрике, то консольное приложение отвисает и выполняет свои действия. Посему у меня вывод: Чтение потока stderr ограничено каким то размером и если он больше, то пьюр программа не справляется...
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 20:54 [ТС] | 15 |
Вот такое выводится в stderr:
Кликните здесь для просмотра всего текста
[vendor_a/app_a] not found in canned fs_config, using defaults
[vendor_a/app_b] not found in canned fs_config, using defaults [vendor_a/app_c] not found in canned fs_config, using defaults [vendor_a/app_d] not found in canned fs_config, using defaults [vendor_a/app_a/DLNA] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser] not found in canned fs_config, using defaults [vendor_a/app_a/Miracast] not found in canned fs_config, using defaults [vendor_a/app_a/VideoPlayer] not found in canned fs_config, using defaults [vendor_a/app_a/DLNA/DLNA.apk] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser/FileBrowser.apk] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser/oat] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser/oat/arm] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser/oat/arm/FileBrowser.odex] not found in canned fs_config, using defaults [vendor_a/app_a/FileBrowser/oat/arm/FileBrowser.vdex] not found in canned fs_config, using defaults [vendor_a/app_a/Miracast/Miracast.apk] not found in canned fs_config, using defaults [vendor_a/app_a/VideoPlayer/VideoPlayer.apk] not found in canned fs_config, using defaults [vendor_a/app_a/VideoPlayer/lib] not found in canned fs_config, using defaults [vendor_a/app_a/VideoPlayer/lib/arm] not found in canned fs_config, using defaults [vendor_a/app_a/VideoPlayer/lib/arm/libsubtitlemanager_jni.so] not found in canned fs_config, using defaults [vendor_a/app_b/DLNA] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser] not found in canned fs_config, using defaults [vendor_a/app_b/Miracast] not found in canned fs_config, using defaults [vendor_a/app_b/VideoPlayer] not found in canned fs_config, using defaults [vendor_a/app_b/DLNA/DLNA.apk] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser/FileBrowser.apk] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser/oat] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser/oat/arm] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser/oat/arm/FileBrowser.odex] not found in canned fs_config, using defaults [vendor_a/app_b/FileBrowser/oat/arm/FileBrowser.vdex] not found in canned fs_config, using defaults [vendor_a/app_b/Miracast/Miracast.apk] not found in canned fs_config, using defaults [vendor_a/app_b/VideoPlayer/VideoPlayer.apk] not found in canned fs_config, using defaults [vendor_a/app_b/VideoPlayer/lib] not found in canned fs_config, using defaults [vendor_a/app_b/VideoPlayer/lib/arm] not found in canned fs_config, using defaults [vendor_a/app_b/VideoPlayer/lib/arm/libsubtitlemanager_jni.so] not found in canned fs_config, using defaults [vendor_a/app_c/DLNA] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser] not found in canned fs_config, using defaults [vendor_a/app_c/Miracast] not found in canned fs_config, using defaults [vendor_a/app_c/VideoPlayer] not found in canned fs_config, using defaults [vendor_a/app_c/DLNA/DLNA.apk] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser/FileBrowser.apk] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser/oat] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser/oat/arm] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser/oat/arm/FileBrowser.odex] not found in canned fs_config, using defaults [vendor_a/app_c/FileBrowser/oat/arm/FileBrowser.vdex] not found in canned fs_config, using defaults [vendor_a/app_c/Miracast/Miracast.apk] not found in canned fs_config, using defaults [vendor_a/app_c/VideoPlayer/VideoPlayer.apk] not found in canned fs_config, using defaults [vendor_a/app_c/VideoPlayer/lib] not found in canned fs_config, using defaults [vendor_a/app_c/VideoPlayer/lib/arm] not found in canned fs_config, using defaults [vendor_a/app_c/VideoPlayer/lib/arm/libsubtitlemanager_jni.so] not found in canned fs_config, using defaults [vendor_a/app_d/DLNA] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser] not found in canned fs_config, using defaults [vendor_a/app_d/Miracast] not found in canned fs_config, using defaults [vendor_a/app_d/VideoPlayer] not found in canned fs_config, using defaults [vendor_a/app_d/DLNA/DLNA.apk] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser/FileBrowser.apk] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser/oat] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser/oat/arm] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser/oat/arm/FileBrowser.odex] not found in canned fs_config, using defaults [vendor_a/app_d/FileBrowser/oat/arm/FileBrowser.vdex] not found in canned fs_config, using defaults [vendor_a/app_d/Miracast/Miracast.apk] not found in canned fs_config, using defaults [vendor_a/app_d/VideoPlayer/VideoPlayer.apk] not found in canned fs_config, using defaults [vendor_a/app_d/VideoPlayer/lib] not found in canned fs_config, using defaults [vendor_a/app_d/VideoPlayer/lib/arm] not found in canned fs_config, using defaults [vendor_a/app_d/VideoPlayer/lib/arm/libsubtitlemanager_jni.so] not found in canned fs_config, using defaults И пьюрик не может обработать... Но я нашел обходное решение... Не читать данный поток, а скидывать его в текстовый файл. А уж после, загружать в окно моей программы.
0
|
|
||||||
18.11.2021, 21:43 | 17 | |||||
Я так понимаю, пока программа запущена, то выполняется вот этот цикл и читаются StringOem.
И из цикла выход только в одном случае - когда программа завершит свою работу. Таким образом управление передаётся в другой цикл, где и читаются ошибки ReadProgramError:
Откуда возьмутся ошибки? Мне не ясно. Почему 2 разных цикла, а не как в моём примере, в одном?
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 21:59 [ТС] | 18 |
Потому как я в результате многочисленных тестов к этому пришел...
Кстати, сразу не присмотрелся к вашему коду, что там в одном цикле всё выполняется. Реализовал у себя, зависоны пропали, результат получаю в режиме реального времени. НО!!! Режет хвост... то есть читает буфер, всё выводит, но последние несколько строчек не отображает...
0
|
0 / 0 / 0
Регистрация: 17.10.2021
Сообщений: 48
|
|
18.11.2021, 22:55 [ТС] | 19 |
Пишется в какой то буфер и они там накапливаются, пока их не считают.
Зависоны у меня были потому как в этом буфере собралось много данных, что пьюрик и считать уже не мог... Потому как в вашем варианте, не считываются все ошибки и некоторые не отображаются ибо в буфере может быть больше данных, чем можно считать за один раз, поэтому я его и считывал полностью после завершения работы программы в цикле... Ничего не терялось, но оказывается что размер буфера ограничен. Так и не понял как лучше сделать, что бы считать весь буфер stderr, без пропусков...
0
|
|
|
18.11.2021, 22:58 | 20 |
0
|
18.11.2021, 22:58 | |
|
Новые блоги и статьи | |||||
Элементы алгоритмизации
hw_wired 28.01.2025
Основы алгоритмизации
В современном мире алгоритмы играют фундаментальную роль в развитии информационных технологий и программирования. Понимание основ алгоритмизации является ключевым элементом в. . .
|
Человек и информация
hw_wired 28.01.2025
Введение: роль информации в познании мира
В современном мире информация играет фундаментальную роль в процессе познания окружающей действительности. Она представляет собой совокупность сведений об. . .
|
Компьютер и информация
hw_wired 28.01.2025
Эволюция вычислительных машин
История развития вычислительной техники начинается задолго до появления первых электронных устройств. Человечество всегда стремилось упростить процесс вычислений и. . .
|
Информационные технологии
hw_wired 28.01.2025
Введение в современные технологии работы с информацией
В современном мире информационные технологии стали неотъемлемой частью практически всех сфер человеческой деятельности. Они существенно. . .
|
Информация вокруг нас
hw_wired 28.01.2025
Основные понятия информации
В современном мире понятие информации является фундаментальным и охватывает практически все сферы человеческой деятельности. Информация представляет собой совокупность. . .
|
Компьютер для начинающих
hw_wired 28.01.2025
Введение в мир компьютерных технологий
В современном мире информация стала одним из важнейших ресурсов человечества, определяющим развитие общества и технологий. Наша жизнь неразрывно связана с. . .
|
[golang] 189. Rotate Array
alhaos 28.01.2025
Повороты рукоятки, целочисленный слайс нужно сдвинуть на целое положительное число. Мне очень нравится решение на GO
/ / https:/ / leetcode. com/ studyplan/ top-interview-150/
package topInterview
. . .
|
КуМир: решение задач на матрицы
bytestream 28.01.2025
КуМир представляет собой среду для обучения программированию, которая включает в себя мощные инструменты для работы с матрицами. Матрица в программировании - это двумерный массив, состоящий из. . .
|
КуМир: решение задач на строки
bytestream 28.01.2025
В системе программирования КуМир работа со строковыми данными является одним из важнейших аспектов создания программ. Строки представляют собой последовательности символов, заключенные в кавычки,. . .
|
КуМир: решение геометрических задач
bytestream 28.01.2025
Программирование геометрических задач в среде КуМир становится всё более актуальным в обучении школьников и студентов. КуМир — это разработанная в России обучающая программная среда, предназначенная. . .
|
КуМир, исполнитель Водолей: Задачи и решения
bytestream 28.01.2025
КуМир — это образовательная среда для обучения программированию. Она предлагает пользователям разнообразные инструменты для разработки и отладки программ, что особенно ценно для студентов и. . .
|
КуМир, исполнитель Чертежник: Решение задач
bytestream 28.01.2025
КуМир (Комплект Учебных МИРов) представляет собой образовательную среду для обучения основам программирования и алгоритмизации.
Исполнитель Чертежник работает на координатной плоскости, где может. . .
|