Название: Вывод приложения в консоль Отправлено: juvf от Ноябрь 03, 2020, 10:04 Добрый день.
Очень часто прогеры пишут Qt GUI приложение и запускают с консолью. Приложение запускается в 2-х окнах: само приложение как GUI и отдельное окошко с консолью. Это дополнительное окошко пользователю не нужно (если оно нужно, то перереши приложение так, чтобы оно было не нужно). Как в Qt эту консоль можно реализовать виджетом (например QDocWidget)? Как сделать докВиджет я знаю. Как перенаправить весь хлам из консоли в этот виджет? Как перенаправить/перехватить сообщения от всяких std::cout, qDebug(), printf(), system, curl, и т.п. ? Название: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 03, 2020, 10:30 Вы про это? https://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output
Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 03, 2020, 12:03 Вы про это? https://stackoverflow.com/questions/4954140/how-to-redirect-qdebug-qwarning-qcritical-etc-output Не совсем. Это решение для qDebug. Но std::cout это не перенаправит в мой виджет. А также, в программе можно сделать системный вызов, например system("some_progpam -a -p 192.168.1.2"); И этот системный вызов вернёт в консоль ответ, такой, как если бы из консоли терминала выполнить "some_progpam -a -p 192.168.1.2". Этот вывод я бы тоже хотел перехватить. Название: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 03, 2020, 13:02 Сомнительно, что такое можно вообще сделать мультиплатформенно.
Кстати, а конвейер не подойдёт7 Я имею в виду Код: prog1 | prog2 Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 03, 2020, 13:13 Сомнительно, что такое можно вообще сделать мультиплатформенно. Мне мультиплатформенно не нужно. Только в винде.Кстати, а конвейер не подойдёт7 Я имею в виду Код: prog1 | prog2 Я тоже сомневаюсь, что есть готовое красивое решение.... но тем не менее... что за "prog1 | prog2"? Можно вроде как из консоли запустить бинарник(не только Qt-ый, а вообще любой), и весь вывод перенаправить куданить, например в /dev/null, или в файл. По крайне мере такое возможно в Linux. Может быть так же при запуске перенаправить весь вывод в /home/user/myPipe (или как это в винде? c:/user/appdata/myPipe), а моё приложение создаст этот pipe и будет с него всё выгребать и перенаправлять в виджет? Или написать утилиту, которая создаст канал (pipe, stream, file, tcpSocked....) и запустит моё приложение. Утилита передаст дескриптор(указатель, адрес) моему приложению через аргументы при запуске, и при запуске перенаправит весь вывод моего приложения в этот канал? Что-то подобное взлетит? Название: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 03, 2020, 13:17 что за "prog1 | prog2"? Ну, это передача выходного потока одной программы во входной поток другой. Его ещё "труба" называют. :) Я, правда понятия не имею, есть ли подобное в винде.Кстати, через локальные сокеты тоже вполне пойдёт. Оно вот точно мультиплатформенно. P.S. Хотя... pipe это как и есть та самая "труба". Но, реализацию, увы, не подскажу. :( Название: Re: Вывод приложения в консоль Отправлено: qate от Ноябрь 03, 2020, 23:16 обязательно в виджет или файла, который будет иметь весь консольный вывод, будет достаточно ?
Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 04, 2020, 09:11 обязательно в виджет или файла, который будет иметь весь консольный вывод, будет достаточно ? даНазвание: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 04, 2020, 09:46 Код: my_prog >> log.out Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 04, 2020, 09:48 my_prog >> log.out [/quoteа в виджет? Название: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 04, 2020, 09:49 my_prog >> log.out В файл на диске. Чуть выше было согласие на такое. [/quoteа в виджет? Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 04, 2020, 09:52 Цитировать обязательно в виджет или файла? согласие было в виджет или файл.в файл не очень хорошая затея, т.к. размер файла не будет контролироваться. Название: Re: Вывод приложения в консоль Отправлено: tux от Ноябрь 04, 2020, 10:00 в файл не очень хорошая затея, т.к. размер файла не будет контролироваться. Тогда остаётся только "труба". Я с pipe как-то даже делал что-то. Но - давно. А сейчас, банально, нет винды. Совсем.Название: Re: Вывод приложения в консоль Отправлено: qate от Ноябрь 04, 2020, 11:17 в файл не очень хорошая затея, т.к. размер файла не будет контролироваться. файл можно обнулять по таймеру чуть позже накидаю как я делаю Название: Re: Вывод приложения в консоль Отправлено: qate от Ноябрь 05, 2020, 00:49 1. Запуск программы выполняется через bat файл MyProgram.bat: MyProgram.exe 2>&1 | tee log_file_[currentdatetime].txt
tee.exe - программа из состава cigwin это обеспечивает вывод в "консольное черное окно" и далее в файл даже несмотря на то, что в pro файле стоит CONFIG -= console и следовательно при линковке: -Wl,-subsystem,windows для отладки это удобно currentdatetime - текущее время, или число секунд от эпохи 2. т.к. "консольное черное окно" - пользователю неугодно видеть, то его надо скрыть делает это простейшая программа hidec.exe http://forum.oszone.net/showthread.php?t=29630 3. Итоговый запуск программы выполняет MyProgramRunner.exe, который состоит из одной функции: CreateProcess(NULL, "hidec.exe MyProgram.bat", NULL, NULL, FALSE, CREATE_NEW_PROCESS_GROUP, NULL, NULL, &cif, &pi); Ничего лучшего для венды я придумать не смог, но для пользователя всё это незаметно - дабл клик по иконке на рабочем столе как обычно. Название: Re: Вывод приложения в консоль Отправлено: juvf от Ноябрь 05, 2020, 06:42 ... Ничего лучшего для венды я придумать не смог, но для пользователя всё это незаметно - дабл клик по иконке на рабочем столе как обычно. 1) Я не админ, я программист, пишущий ПО. Я написал прогу и отдал пользователю (портабл либо сетап). Ковырять его ПК (системные файлы, реестры, погоды....) я не могу и не буду. Допустим я сетапником смогу закинуть hidec.exe в c:\windows\system32 (тут ещё вопрос, будет ли hidec.exe работать на чужой винде?) Можно hidec.exe положить не в c:\windows\system32, а рядом с MyProgram.ехе? 2)далее.... запустится моя прога со скрытой консолью. Как, во время работы MyProgram.ехе, открыть консоль и посмотреть что там? А потом опять закрыть? Название: Re: Вывод приложения в консоль Отправлено: qate от Ноябрь 05, 2020, 13:08 1. я тоже не админ- написал прогу и отдал её пользователю, сделав инсталятор или просто zip
ничего ковырять в системе не надо hidec.exe - это win-api приложение, конечно она будет работать 2. создаваемый лог файл открой и посмотри, затем закрой ) |