Как использовать QProcess для упаковки telenet.exe в Windows?

Я пытаюсь закодировать класс-оболочку, используя QProcess для управления приложениями CLI (например, telnet.exe, ftp.exe) в Windows, но пока безуспешно. Вы знаете, возможно ли это?

Ниже приведен код, который я использовал, чтобы попробовать telnet.exe в Windows 7. Я ожидал, что этот код выведет "приветственное сообщение" после подключения telnet к серверу, но ничего не выводится (из стандартного вывода или вывода ошибок).

#include <QCoreApplication>
#include <QProcess>
#include <iostream>

class ProcessWrapper :public QObject
{
    Q_OBJECT

public:
    ProcessWrapper();
    ~ProcessWrapper();
    void start();

public  slots:
    void readStandardError();
    void readStandardOutput();

private:
    QProcess *process;
};

ProcessWrapper::ProcessWrapper()
{
    process = new QProcess(this);
    connect(process, SIGNAL(readyReadStandardError()), this, SLOT(readStandardError()));
    connect(process, SIGNAL(readyReadStandardOutput()), this, SLOT(readStandardOutput()));
}

void ProcessWrapper::start()
{
    if(process) {
        process->start("telnet.exe",QStringList() << "135.251.142.36");
        process->waitForStarted();
    }
}

ProcessWrapper::~ProcessWrapper()
{
    if(process) delete process;
}

void ProcessWrapper::readStandardOutput()
{
    if(process) {
        QByteArray s = process->readAllStandardOutput();
        QString str(s);
        std::cout << str.toStdString();
    }
}

void ProcessWrapper::readStandardError()
{
    if(process) {
        QByteArray s = process->readAllStandardError();
        QString str(s);
        std::cout << str.toStdString();
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    ProcessWrapper p;
    p.start();

    return a.exec();
}

#include "main.moc"

1 ответ

Функция main() завершается сразу после того, как вы вызвали ProcessWrapper::start().

Другие вопросы по тегам