QProcess不适用于" wget"

时间:2017-11-20 22:18:22

标签: c++ linux qt qprocess

我正在尝试执行这样的命令:

wget --user=abc --ask-password https://xxxxx.com/file.zip

然后我必须提供密码。

此代码应处理它:

connect(&checkFW, SIGNAL(readyReadStandardOutput()), this, SLOT(readOutput()));
//QString command = "wget --user=abc--ask-password https://xxxxxxx.com";
//checkFW.start("sh",QStringList() << "-c" <<"cd ;"+command);
checkFW.start("wget", QStringList() << "--user=abc" << "--ask-password"<< "https://xxxxxx.com/file.zip");
if (!checkFW.waitForStarted()){
    qDebug()<<"Could not start ";
    return false;
}

QString cmd = "password\n";
checkFW.write(cmd.toLatin1());
checkFW.waitForFinished(5000);
QByteArray result = checkFW.readAll();
QString mystr(result);
qDebug()<<"output:"<< mystr;

我曾多次使用QProcess,但这次我无法设法使用它。一些建议?我尝试了不同的methotds和任何回应。当然我没有下载我要求的文件。

我再次检查并将文件下载到/ home目录,而不是app目录。所以它有效,但没有输出。

2 个答案:

答案 0 :(得分:0)

您正在以错误的方式将参数传递给QProcess。

checkFW.start("wget", QStringList() << "--user=abc" << "--ask-password"<< "https://xxxxxx.com/file.zip");

这是ping(Windows)的示例。

#include <QCoreApplication>
#include <QProcess>
#include <QDebug>

int main(int argc, char *argv[])
{
    QProcess proc;
    QStringList args;
    args << "google.com";
    args << "-n";
    args << "3";

    proc.start("ping", args);
    proc.waitForFinished();
    qDebug() << proc.readAllStandardOutput();
}

答案 1 :(得分:0)

如果您只输入:

checkFW.setProcessChannelMode(QProcess::MergedChannels);

之前:

 checkFW.start();

即使错误也将在stdout中获得所有输出