LINUX.ORG.RU

Написание frontend к консольным программам

 , ,


0

1

Всем доброго времени суток:-)

Кто может просветить меня по поводу написания frontend/оболочки/надстройки к программам, запускающимся в терминале? Допустим, для использования apt в графическом режиме? И да, Qt5



Последнее исправление: Klymedy (всего исправлений: 1)

Если консольная программа представляет из себя надстройку над либой, то берёшь либу и пишешь интерфейс.
Если программа «вещь сама в себе», то запускаешь её, и парсишь её вывод.
Если программа «сама в себе» и требует ввода от пользователя, то пишешь всё заново.

Stahl ★★☆
()
Ответ на: комментарий от EXL

А ещё есть kioclient, только это как-бы немного наоборот, из консоли гуи пинать.

[kosyak@kdesktop ~]$ kioclient --commands

Syntax:

  kioclient openProperties 'url'
            # Opens a properties menu


  kioclient exec 'url' ['mimetype']
            # Tries to open the document pointed to by 'url', in the application
            #   associated with it in KDE. You may omit 'mimetype'.
            #   In this case the mimetype is determined
            #   automatically. Of course URL may be the URL of a
            #   document, or it may be a *.desktop file.
            #   'url' can be an executable, too.

  kioclient move 'src' 'dest'
            # Moves the URL 'src' to 'dest'.
            #   'src' may be a list of URLs.

            #   'dest' may be "trash:/" to move the files
            #   to the trash.

            #   the short version kioclient mv
            #   is also available.


  kioclient download ['src']
            # Copies the URL 'src' to a user-specified location'.
            #   'src' may be a list of URLs, if not present then
            #   a URL will be requested.


  kioclient copy 'src' 'dest'
            # Copies the URL 'src' to 'dest'.
            #   'src' may be a list of URLs.

            #   the short version kioclient cp
            #   is also available.


  kioclient cat 'url'
            # Writes out the contents of 'url' to stdout


  kioclient ls 'url'
            # Lists the contents of the directory 'url' to stdout


  kioclient remove 'url'
            # Removes the URL
            #   'url' may be a list of URLs.

            #   the short version kioclient rm
            #   is also available.

Kosyak ★★★★
()

На форму все входные параметры, парсишь выход... Ты по какую программу консольную замахнулся, товарищ?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от Stahl

Если программа «вещь сама в себе», то запускаешь её, и парсишь её вывод.
Если программа «сама в себе» и требует ввода от пользователя, то пишешь всё заново.

а в чем разница?

MyTrooName ★★★★★
()
Ответ на: комментарий от Kosyak

А ещё есть kioclient, только это как-бы немного наоборот, из консоли гуи пинать.

kommander вроде еще был, dialog, ... тыщи их

anTaRes ★★★★
()

tk expect - самое самое простое. На Qt замучаешься повторять его нюансы по запуску дочерних процессов и обработки их вывода. Но это если делать оболочку под консольную сессию (а-ля ssh, irc,...)

по простому, для того-же apt - делается ещё одна консольная оболочка (на том-же expect например) упрощающая и упорядочивающая его выхлоп. А уже её можно легко ловить и обрабатывать через QProcess.

на том-же bash делаешь пачку скриптов в стиле REST и дергаешь их с верхнего уровня. В течении года все ощущают счастье, а потом выкидывают в корзину :) GUI для консольных программ - неимоверный костыль

MKuznetsov ★★★★★
()

в добавление к ораторам про qprocess добавлю замечание, которое было высказано мне как то:

You should take it as a rule to not call blocking API on the main thread.

Ну т.е. если ты собираешься ловить выхлоп от qprocess, то тебе надо выставлять waitForFinished(-1), а это в самом простом случае будет блокировать гуй. Самый простой способ, имхо, это использовать модель сигнал-слот по отрабатыванию QProcess::finished(int, QProcess::ExitStatus). Вообще, чтобы два раза не вставать при отсутствии либы, с которой можно линковаться, настоятельно рекомендую написать таковую и линковать гуй с ней.

arcanis ★★★★
()

ставишь libapt-pkg и доки libapt-pkg-doc.
курить для примеров можно тот же apt-get.

arrecck ★★★
()
Ответ на: комментарий от slovazap

интерактивность интерактивности рознь. есть еще expect. но мысль понятна

MyTrooName ★★★★★
()

Всем доброго времени суток:-)

Так только на Хабр пишут. У нас этого не любят. Пиши сразу о проблеме, всем всё равно, доброе ли у тебя время суток.

anonymous
()
Ответ на: комментарий от anonymous

надо же как-то поздороваться, не «здарова братва» же

Daiquiri
() автор топика
Ответ на: комментарий от Stahl

Если программа «сама в себе» и требует ввода от пользователя, то пишешь всё заново.

Лолчто?

А popen для кого придумали? (Ну правда это будет уже не чистый Qt, но поставленную задачу решает).

upd.

А вообще выше правильно пишут - используйте QProcess

RiseOfDeath ★★★★
()
Последнее исправление: RiseOfDeath (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.