Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Сервер telnet/ssh (выполнение команд)

Автор: darkhac 19.10.2010, 9:07

Кто нибудь знает способ с помощью qt выполнить команду в консоли и получить ее результат. причем по название наверно понятно что команды поступают в потоковом режиме. Причем если пришла команда cd Directory а после нее к примеру Dir то вывестись должно содержимое Directory

Автор: Алексей1153 19.10.2010, 9:28

похоже, вопрос для винды. Поэтому

выполнить

cmd /?


далее читать

Автор: kwisp 19.10.2010, 9:51

darkhac,
воспользуйся поиском, пожалуйста.

Автор: Алексей1153 19.10.2010, 10:20

о, кстати, в С есть функция

system(const char*);

попробуй так команду выполнить :) Думаю, в Qt должны выполнить то, что надо для ОС

Автор: kwisp 19.10.2010, 10:45

Цитата(Алексей1153 @ 19.10.2010, 11:20) *
о, кстати, в С есть функция

system(const char*);

попробуй так команду выполнить :) Думаю, в Qt должны выполнить то, что надо для ОС

шутишь?

darkhac,
http://doc.crossplatform.ru/qt/4.6.x/qprocess.html

Автор: Алексей1153 19.10.2010, 11:32

kwisp, нет, не шучу. Но я не пробовал никогда :)

Автор: darkhac 19.10.2010, 13:32

c QProcces вроде более менее разобрался. в итоге вполне себе выполняет ping и тп, но консольные команды не хочет(ниже представлен код). никто не подскажет? может быть возможно как-то открыть командную строку в фоновом режиме и отсылать ей?

console->start("cmd",QStringList()<<"/K"<<"dir");

Автор: Алексей1153 19.10.2010, 13:41

пробелы перед параметрами поставь
console->start("cmd",QStringList()<<" /K"<<" dir");

Автор: darkhac 19.10.2010, 13:55

Цитата(Алексей1153 @ 19.10.2010, 16:41) *
пробелы перед параметрами поставь
console->start("cmd",QStringList()<<" /K"<<" dir");
не помогает.

Автор: Алексей1153 19.10.2010, 14:03

darkhac, а если путь полностью указать

c:/windows/system32/cmd.exe
или
%CmdSpec%

Автор: darkhac 19.10.2010, 14:26

Проблема решена. спасибо всем. если вдруг потом кто-то наткнется на эту тему то может ему поможет вот этот код

#include <QByteArray>
#include <QProcess>
#include <iostream>
#include <string>

using namespace std;

#pragma comment(lib, "qtmaind.lib")
#pragma comment(lib, "qtcored4.lib")
#pragma comment(lib, "qtguid4.lib")


int main(int argc,char** argv)
{
    QProcess cmd;
    cmd.start("cmd");
    if (!cmd.waitForStarted())
        return false;
    cmd.waitForReadyRead();
    QByteArray result = cmd.readAll();
    cout << result.data();

    string str;
    cin >> str;
    while(str != string("exit"))
    {
        cmd.write(str.c_str());
        cmd.write("\n");
        cmd.waitForReadyRead();
        result = cmd.readAll();
        cout << result.data();
        cin >> str;
    }
}

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)