gpt4 book ai didi

c++ - 用 QProcess 包装 SFTP

转载 作者:行者123 更新时间:2023-11-28 04:12:51 34 4
gpt4 key购买 nike

我想在我的代码中尝试使用 QProcess 在 linux 系统上启动 sftp:

    QProcess* pProc = new QProcess(this);
QString strHost = clsMainWnd::strGetHostName()
,strPort = clsMainWnd::strGetPort()
,strUsername = clsMainWnd::strGetUsername();
QStringList slstCmdArgs;
slstCmdArgs << (strUsername + QString("@") + strHost)
<< (QString("-P") + strPort);
pProc->start("sftp", slstCmdArgs);
while( pProc->waitForStarted() != true ) {
}
QByteArray bytaryIn = pProc->readAllStandardOutput();
qDebug() << bytaryIn;

我想做的是等待“密码:”提示然后输入密码,但 bytaryIn 始终为空。

我已验证命令行参数的格式正确并输出到控制台。

然后我在终端中使用它们进行测试,它们按预期工作。

命令将被格式化为:

    sftp User@HostName -P22

[编辑] 我已将此代码重写为以下内容:

    QString strHost = clsMainWnd::strGetHostName()
,strPort = clsMainWnd::strGetPort()
,strUsername = clsMainWnd::strGetUsername();
QStringList slstCmdArgs;
slstCmdArgs << (strUsername + QString("@") + strHost)
<< (QString("-P") + strPort);
mpSFTP = new QProcess(this);
connect(mpSFTP, SIGNAL(readyReadStandardOutput())
,this, SLOT(readSFTPoutput()));
mpSFTP->start("sftp", slstCmdArgs);

我在插槽中有一个调试语句,但我从未看到它,所以信号没有发出。

最佳答案

快速测试显示sftp 直接访问终端询问密码。您将不得不使用 wrapper script为您输入密码。

另一种方法是创建一个伪 tty 对并使用它来输入密码,但您将无法使用任何 QProcess 机制。

关于c++ - 用 QProcess 包装 SFTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57308129/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com