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 机制。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/268963.html