Как привязать bash скрипт к коду Qt/C++

программирование Linux C++ qt bash

Есть Bash скрипт который выдает в консоль сообщение, как преобразовать это сообщение в переменную QString или QStringList

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

Примечание:
string text(system(<команда>)); это делает тоже самое что и system();
Ответы:
system();
> Примечание №1
Плохо знаю синтаксис c/c++, но вроде так:
string text(system(<команда>));
Для передачи команды от программы к командной оболочке ОС (в данном случае bash) используется системный вызов int system(const char* command);
Но! Bash не просто выполняет команду, а запускает новый процесс. Передача данных превращается в межпроцессное взаимодействие.
Можно перенаправить вывод команды в файл (system("./script.sh > file"); ), а потом читать оттуда вывод скрипта. Вместо обычного файла лучше использовать именованный канал. Он создаётся системным вызовом int mkfifo(const char *pathname, mode_t mode); Второй параметр - это права доступа. Как и у обычных файлов - три цифры в восьмеричной системе счисления. Теперь любой процесс может открыть канал fopen()'ом. Далее вызываем system(), не забыв перенаправить вывод скрипта в свежесозданный канал (который является файлом, ибо в юниксах "Всё есть файл"). Открываем его в программе, которой надо получить сообщение от скрипта, читаем, записываем в QString или QStringList или куда-нибудь ещё.
Это первое, что пришло в голову. Возможно, есть более красивые и быстрые способы. Просто мне лень в этом разбираться.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.