【问题标题】:SSH don't work in the QProcess,but it works in the consoleSSH 在 QProcess 中不起作用,但在控制台中起作用
【发布时间】:2019-08-15 06:26:27
【问题描述】:

我有这个代码:

QProcess* proc = new QProcess();  
proc->start("cmd.exe");
proc->write("ssh\n");
proc->closeWriteChannel();
proc->waitForFinished();
QTextCodec *codec = QTextCodec::codecForName("IBM 866");
ui->textEditNormal->setText(codec->toUnicode(proc->readAllStandardOutput()));
ui->textEditError->setText(codec->toUnicode(proc->readAllStandardError()));

写在StandartError:

'ssh' is not recognized as an internal or external command

如果我在cmd.exe 中重复所有内容,那么一切都很好 如何解决?

【问题讨论】:

  • 也许 PATH 不是您所期望的?尝试使用 ssh.exe 的绝对路径

标签: c++ qt ssh qprocess


【解决方案1】:

也许您应该等待进程启动后再写入。下面的例子做了类似的事情。我没有安装 ssh,所以我在我的 Windows 机器上发布了dir。试试看吧。

#include <QApplication>
#include <QDebug>
#include <QTextBrowser>
#include <QProcess>

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    auto process = new QProcess;
    auto view = new QTextBrowser;
    process->setWorkingDirectory("C:/Temp");
    QObject::connect(process, &QProcess::readyReadStandardOutput, [process,view]() {
        auto output=process->readAllStandardOutput();
        view->append(output);
    });
    QObject::connect(process, &QProcess::readyReadStandardError, [process,view]() {
        auto output=process->readAllStandardError();
        view->append(output);
    });
    process->start("cmd.exe");
    process->setProcessChannelMode(QProcess::MergedChannels);

    process->waitForStarted();
    process->write("dir\n");
    qDebug() << process->error();
    view->show();
    return a.exec();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多