我想尝试使用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;
我想做的是等待“ Password:”提示,然后输入密码,但是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);
我在插槽中有一条调试语句,但我从未看到过,因此不会发出信号。
答案 0 :(得分:1)
快速测试表明sftp
直接访问终端以询问密码。您将必须使用wrapper script输入您的密码。
另一种方法是创建一个伪tty对,并使用该对输入密码,但是您将无法使用任何QProcess机制。