Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70

Работа с программами командной строки

14.06.2017, 09:27. Показов 7292. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Хочу что бы программа работала с информацией которую выводят консольные приложения.
т.е к примеру "ping"
Запускаю свою программу она выполняет ping 127.0.0.1 и выводит значения задержки или ттл к примеру.
как организуется захват информации с командной строки? если у Qt есть какие то средства то можно них ссылку.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.06.2017, 09:27
Ответы с готовыми решениями:

некорректная работа командной строки
Всем привет! На ос Win7 HPx64 как-то странно ведет командная строка. Например, при команде help, читаю, что команда не является внутренне...

Работа с COM- портом из командной строки
День добрый, очень мечтаю (как многие радиолюбители) мониторить входные дискретные сигналы COM-порта (управлять выходами COM-порта...

Работа с аргументом командной строки
В общем, дополнительное задание к лабе: Прочитать аргумент командной строки и добавить в него пробелы так, чтобы длина строки равна...

33
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.06.2017, 14:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от GoldSieg Посмотреть сообщение
могли бы сразу так сказать
Я и сказал сразу, что проще сделать нормальное приложение с окном. Это тебя тянет к консолям.
0
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
22.06.2017, 14:16  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
Я и сказал сразу, что проще сделать нормальное приложение с окном. Это тебя тянет к консолям.
Да я такое и сделал. с текстбоксом и 2мя кнопками и оно нормально работает, но мне нужно приложение которое будет работать исключительно в консоли, скажем на сервере.
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.06.2017, 14:22
Ну ты сделал вариант с классом, работает?
0
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
22.06.2017, 14:37  [ТС]
Цитата Сообщение от nmcf Посмотреть сообщение
работает?
Да я не шарю как так сделать.

заголовочный
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#ifndef TEST_H
#define TEST_H
 
#include <QProcess>
#include <QObject>
 
class Test : public QObject
{
    Q_OBJECT
public:
    explicit Test(QObject *parent = 0);
    QProcess *myProcess, *myProcess_2;
 
signals:
 
public slots:
 
private slots:
 
    void Knopka();
    void Knopka2();
 
    void processPrintStandardOutput();
    void processPrintStandardOutput_2();
 
};
 
#endif // TEST_H
CPP
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "test.h"
#include <QDebug>
 
Test::Test(QObject *parent) :
    QObject(parent)
{
    myProcess = new QProcess( this );
    connect( myProcess, SIGNAL( readyReadStandardOutput() ), SLOT( processPrintStandardOutput() ) );
 
    myProcess_2 = new QProcess( this );
    connect( myProcess_2, SIGNAL( readyReadStandardOutput() ), SLOT( processPrintStandardOutput_2() ) );
}
void Test::Knopka()
{
        QString program = "iperf";
        QStringList argum;
        argum << "-s" << "-u";
        myProcess->start( program, argum );
}
void Test::Knopka2()
{
        QString program = "iperf";
        QStringList argum;
        argum << "-c" << "127.0.0.1" << "-y" << "C" << "-u" << "-b" << "350m";
        myProcess_2->start( program, argum );
}
 
void Test::processPrintStandardOutput()
{
    QString str( myProcess->readAllStandardOutput() ), buf;
 
    qDebug()<< str;
    // вытаскивание   %
 
    int a = str.indexOf("%");
 
    buf = str.mid(a-7,9);
 
    QRegExp rx("[(](.*)[%]");
 
    QString value;
    double d = -1;
    int pos = rx.indexIn(buf);
    if (pos > -1) {
     value = rx.cap(1);
     qDebug()<<"цифра = " << value;
     d=value.toDouble();
                    }
    qDebug() << d;
}
 
void Test::processPrintStandardOutput_2()
{
    QString str( myProcess_2->readAllStandardOutput() );
    qDebug()<< str;
}
Main
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
#include <QtCore/QCoreApplication>
#include <QProcess>
#include "test.h"
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    Test t;
    
    return a.exec();
}
В 1м процессе запускается iperf сервер
В 2м клиент. выводится % потерь пакетов
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
22.06.2017, 15:30
Лучший ответ Сообщение было отмечено GoldSieg как решение

Решение

Ну тогда надо так:
C++
1
2
Test t;
t.Knopka();
Добавлено через 1 минуту
Должно быть предусмотрено корректное завершение. Или ключ -t используй.
1
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.06.2017, 15:43
Если правильно понял, твоя прога в зависимости от флагов либо запускать сервер, либо тестировать пакеты к нему. Если так, то

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    Test t;
    if((argc > 0) && strcmp("-t",argv[0]))
       t.Knopka2();
    else
       t.Knopka();
       
    return a.exec();
}
а в конце функций Test::processPrintStandardOutput() и Test::processPrintStandardOutput_2() сделать вызов
C++ (Qt)
1
 QCoreApplication::exit(0);
для завершения программы...
0
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
22.06.2017, 15:47  [ТС]
Цитата Сообщение от TRam_ Посмотреть сообщение
сервер, либо тестировать
запустить и сервер и клиент. в двух разных процессах
команда iperf -s запускает сервер который ждет когда к нему подключатся клиенты. она и в терминале сама не закрывается.
команды iperf -с.... запускает клиента который обращается к серверу.
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.06.2017, 15:54
GoldSieg, тогда
C++ (Qt)
1
2
3
    Test t;
    t.Knopka();
    t.Knopka2();
1
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
22.06.2017, 16:00  [ТС]
TRam_,
А не так? похоже работает правильно, всем СПАСИБО!
C++ (Qt)
1
2
3
    Test t, t2;
    t.Knopka();
    t2.Knopka2();
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.06.2017, 16:03
GoldSieg, можно и так, только больше объектов в памяти содержать. Слоты в этих объектах всё равно будут вызываться последовательно (по мере обработки событий в a.exec() ) так что проще запускать оба процесса из одного объекта. Заодно проще будет "взаимодействие одного с другим" написать.

Либо, наоборот, разбить Test на два разных класса (чтоб один был ответственен за запуск, а второй - за эмуляцию клиента).
0
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
22.06.2017, 16:19  [ТС]
TRam_, нуу это мб, но так как написали вы в моей программе не работает, запускается только сервер.

Добавлено через 12 минут
Хотя рано я обрадовался. мой вариант тоже косячит. работает через раз
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
22.06.2017, 16:19
Надо будет как-нибудь проверить . Возможно процесс запуска пользователя выполнился перед запуском сервера и завершился без вывода... Тогда желательно б добавить
C++ (Qt)
1
2
3
4
5
6
7
8
void Test::Knopka()
{
        QString program = "iperf";
        QStringList argum;
        argum << "-s" << "-u";
        myProcess->start( program, argum );
        myProcess->waitForStarted(1000);
}
для гарантии того, что процесс у нас действительно запустился (или по крайней мере запускался)
0
 Аватар для Wyn
1073 / 654 / 230
Регистрация: 14.01.2016
Сообщений: 2,031
Записей в блоге: 9
28.06.2017, 10:11
Цитата Сообщение от GoldSieg Посмотреть сообщение
если запустить прогу в терминале напишет "cannot connect to X server"
Что в main.cpp написано и в .pro файле?
0
0 / 0 / 0
Регистрация: 27.10.2014
Сообщений: 70
29.06.2017, 15:21  [ТС]
Wyn, раз уж подняли темку, то подскажите как программу адекватно завершать
как тут советовали QCoreApplication::exit(0); в processPrintStandardOutput. то программа завершится еще до вывода варнингов.
Если в метод варнинга, то она может не завершиться при отсутствии варнинга.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2017, 15:21

Работа с аргументом командной строки
используя аргумент командной строки, сгенерировать случайное число с количеством цифр заданных как аргумент #!/bin/bash echo...

Работа с параметрами командной строки
Помогите создать пример, выводящий на экран, все параметры командной строки 3-мя способами, используя разные управляющие конструкции ....

Работа с аргументами командной строки
Котаны, комрады. подсобите. Даны переменные A, B, C. Изменить их значения, переместив содержимое A в B, B — в C, C — в A, и вывести новые...

Работа с аргументами командной строки
Использую fpc в линуксе . Никак не получается разобраться как же правильно использовать paramcount и paramstr() . буду очень благодарен ,...

Работа с устройствами из командной строки
Как удалить драйвер сетевой карты с командной строки? Впринипе не обязательно с командной строки, можно и экзешником главное чтобы это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru