SSH 在 QProcess 中不起作用,但在控制台中起作用

Posted

技术标签:

【中文标题】SSH 在 QProcess 中不起作用,但在控制台中起作用【英文标题】:SSH don't work in the QProcess,but it works in the console 【发布时间】: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 的绝对路径 【参考方案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();

【讨论】:

以上是关于SSH 在 QProcess 中不起作用,但在控制台中起作用的主要内容,如果未能解决你的问题,请参考以下文章

JS 代码在我将其粘贴到控制台时有效,但在我的 React 应用程序中不起作用

源代码控制在 Xcode 8 中不起作用

窗口挂钩在 Windows 7 中不起作用,但在 Windows xp 中不起作用

在同一控制器中以其他方法访问会话数据在 laravel 中不起作用

Unwind Segue 在 iOS 8 中不起作用

渐变在 Chrome 中不起作用,但在 Firefox 中起作用