Wrap SFTP with QProcess
我想在我的代码中尝试使用 QProcess 在 linux 系统上启动 sftp:
1 2 3 4 5 6 7 8 9 10 11 12 | 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; |
我要做的是等待"Password:"提示然后注入密码,但是bytaryIn总是空的。
我已验证命令行参数的格式正确并输出到控制台。
然后我在终端中使用它们进行测试,它们按预期工作。
命令将被格式化为:
1 | sftp User@HostName -P22 |
[编辑] 我已将此代码重写为以下内容:
1 2 3 4 5 6 7 8 9 10 | 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); |
我在插槽中有一个调试语句,但我从来没有看到它,所以没有发出信号。
快速测试显示
另一种方法是创建一个伪 tty 对并使用它来输入密码,但您将无法使用任何 QProcess 机制。