Название: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 01, 2017, 18:40 Приветствую заглянувших.
Есть - QProcess, создающийся динамически, подцепленный к слотам чтения. Код: QProcess *process = new QProcess; В половине случаев данные приходят. Т.е. к примеру команды ls, cp выдают и ошибки и ожидаемые данные. А вот при попытке получить заведомую ошибку, вроде "cd ывфыв", когда он должен выдать вроде "bash: cd: ывфыв: Нет такого файла или каталога", в ошибках пустота. Пока у меня только один вариант - это сообщение об ошибки генерится отдельно от команды cd, Но тогда как его получить? Решение: запускать bash (интерпретатор командной строки) и работать только в нём, подсовывая команды по очереди. Причина: cd и множество прочих системных команд - это команды интерпретатора командной строки bash. Название: Re: QProcess, пропадает stderr Отправлено: sergek от Октябрь 01, 2017, 20:56 А если так попробовать:
connect(process, &QProcess::readyReadStandardError, this, &класс::readyReadStandardError); ? Название: Re: QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 00:37 Эм... Ну проверил, эффект тот же.
Стандартные ошибки он передаёт, вроде нет прав или неправильные аргументы. А вот именно ошибки системных утилит он куда то засобачивает. Соединение сигнал-слотовое есть 100%, на оба слота. При Merge output тоже всё проходит, кроме таких ошибок. Как я уже упомянул, мне кажется что эти "ошибки" выдаёт терминал(не утилита), в зависимости от кода ошибки системной утилиты. Но я недостаточно хорошо знаю linux, чтобы быть уверенным в этом. Название: Re: QProcess, пропадает stderr Отправлено: sergek от Октябрь 02, 2017, 10:39 А попробуйте запустить такую команду: "ls ывфыв", и вы увидите то, что ожидали: "error:ls: невозможно получить доступ к ывфыв: Нет такого файла или каталога".
А если еще после Код: process->start("cd", (QStringList() << "ывфыв")) Код: if(!process->waitForStarted()) Название: Re: QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 13:23 Он стартует и просто не отсылает вывод.
Мало того объект создаётся динамически и вообще не уничтожается. ls ывфыв Код: ls: невозможно получить доступ к 'ывфыв': Нет такого файла или каталога cd ывфыв Код: - Не срабатывает ни один из слотов, кроме finished, данные не поступают, сигналов readyReadStandart* не срабатывают. Немного поискал и выяснил что сообщение Код: bash: cd: ывфыв: Нет такого файла или каталога Пока что вижу выход в запуске терминала и общении с ним(одним процессом), посылая туда команды по очереди. Название: Re: QProcess, пропадает stderr Отправлено: Old от Октябрь 02, 2017, 13:28 Как я понял, консоль и интерпретатор командной строки в нём это две совершенно разные вещи (инопланетяне мля). Это так везде, даже в венде. :)Командный интерпретатор cmd.exe тоже запускается в связке с терминалом. Название: Re: QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 13:45 Не, там нет такого как "в терминале есть ошибка", а при просто запуске процесса ошибка пропадает нафиг в никуда Оо...
По сути я так понимаю я в линуксе командой cd ывфыф я запускаю процесс на выполнение. Сам процесс не выдаёт никаких ошибок от слова вообще. И это системная, мать её, утилита. Такой ситуации в винде просто нет. Там каждое приложение имеет свои ошибки и там нет разницы, запускаешь ты в cmd или просто процесс. Что ставит очередной плюс винде по юзабельности. PS хотя это может быть просто косяк разрабов. Дескать ну его нахрен, писать ошибки системным утилитам, давайте мы им просто забьём коды ошибок, а описывать их будет интерпретатор. Название: Re: QProcess, пропадает stderr Отправлено: Old от Октябрь 02, 2017, 13:48 Не, там нет такого как "в терминале есть ошибка", а при просто запуске процесса ошибка пропадает нафиг в никуда Оо... Как всегда куча предположений, а проверить забыл. :)По сути я так понимаю я в линуксе командой cd ывфыф я запускаю процесс на выполнение. Сам процесс не выдаёт никаких ошибок от слова вообще. И это системная, мать её, утилита. Такой ситуации в винде просто нет. Там каждое приложение имеет свои ошибки и там нет разницы, запускаешь ты в cmd или просто процесс. Что ставит очередной плюс винде по юзабельности. PS хотя это может быть просто косяк разрабов. Дескать ну его нахрен, писать ошибки системным утилитам, давайте мы им просто забьём коды ошибок, а описывать их будет интерпретатор. Найдите у себя на машине бинарник cd. :) Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: qate от Октябрь 02, 2017, 14:03 А вот при попытке получить заведомую ошибку, вроде "cd ывфыв", когда он должен выдать вроде "bash: cd: ывфыв: Нет такого файла или каталога", в ошибках пустота. и сигнал QProcess::errorOccurred не вылетает ? Название: Re: QProcess, пропадает stderr Отправлено: sergek от Октябрь 02, 2017, 14:28 Он стартует и просто не отсылает вывод. Нет, не стартует ;) Где-то я читал, что QProcess используется для запуска программ, для системных команд (типа cd) он непригоден. По-моему об этом Old и намекал, предлагая найти программу cd. Системную команду нужно запускать в bash скрипте. Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 14:58 Нда, столько лет пользовался и не знал.
Ну т.е. остаётся только bash запускать и в нём работать. Иначе походу никак. Предположения на то и предположения, что их надо проверять. Error вылетает, процесс не стартует. PS кто нить знает примочку, позволяющую создать все приёмные слоты класса на выбор? Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Old от Октябрь 02, 2017, 15:12 Предположения на то и предположения, что их надо проверять. Так почему не проверяете?Error вылетает, процесс не стартует. Как вы там важно пишете... Код где?PS кто нить знает примочку, позволяющую создать все приёмные слоты класса на выбор? Вы сейчас отдохните и попробуйте задать вопрос еще раз. :)Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: qate от Октябрь 02, 2017, 15:47 Ну т.е. остаётся только bash запускать и в нём работать. Иначе походу никак. process.start("/bin/bash", QStringList() << "-c" << "command1;command2;..."); Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 17:19 to Old:
Цитировать Error вылетает, процесс не стартует. Это к вопросам sergek и qate.Не проверял, ибо запарился. Отдохнул. вопрос не изменился - есть ли утилита позволяющая создать приёмные сигнал слоты, на конкретный QObject. Т.е. в случае с QProcess это Цитировать void error(QProcess::ProcessError error) .void finished(int exitCode, QProcess::ExitStatus exitStatus) void readyReadStandardError() void readyReadStandardOutput() void started() void stateChanged(QProcess::ProcessState newState) to qate попробую. Хотя скорее всего не подойдёт, некоторые команды могут выдавать ошибки и продолжать выполнение команд не имеет смысла, а то и совсем фатально. Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Old от Октябрь 02, 2017, 17:25 to Old: Так у вас bash не стартует?Цитировать Error вылетает, процесс не стартует. to qate попробую. Хотя скорее всего не подойдёт, некоторые команды могут выдавать ошибки и продолжать выполнение команд не имеет смысла, а то и совсем фатально. Тогда нужно ";" между командами заменить на "&&".А лучше взять на работу человека разбирающегося в этом. Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 18:14 Угу.
Прям при первом же случае, когда я что-то не понимаю в своей работе, я буду нанимать разбирающегося человека :D Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Old от Октябрь 02, 2017, 18:23 Угу. Это совет был скорее не вам, а вашему работадателю.Прям при первом же случае, когда я что-то не понимаю в своей работе, я буду нанимать разбирающегося человека :D Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 18:29 Угу. Вы были бы прекрасным чиновником.
Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: sergek от Октябрь 02, 2017, 19:08 Создаем текстовый файл с именем scr, устанавливаем ему права на выполнение. Содержимое скрипта:
Код: #!/bin/bash Код: process->start("./scr"); Код: ./scr: строка 2: cd: ывфыв: Нет такого файла или каталога Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 19:11 Та это и так понятно, но спасибо за старание :)
Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: qate от Октябрь 02, 2017, 20:01 Error вылетает, процесс не стартует. верно, а значение ошибки говорит о невозможности запуска "cd" т.к. это не программа, а встроенная функция командного интерпретатора Название: Re: [РЕШЕНО] QProcess, пропадает stderr Отправлено: Bepec от Октябрь 02, 2017, 21:57 Это уже дошло до мине.
А ошибка содержит сообщение что файл не найден. |