使用QProcess将命令发送到服务器

问题描述 投票:1回答:1

我用QProcess做了一个简单的例子。 只需从DBpedia服务器获取json值。 问:如何使用QProcess进行命令?

Original command
curl -s "http://dbpedia.org/data/Haeinsa.json"| perl dbpediaPlaceData.txt 'Haeinsa'

My code

1. get JSON value from DBPedia server
#include <QCoreApplication>
#include <QDebug>
#include <QProcess>
#include <QFileInfo>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString command="curl";
    QProcess pro;
    QStringList arg;
    arg.append("-v");
    arg.append("--insecure");
    arg.append("GET");
    arg.append("http://dbpedia.org/data/Haeinsa.json");

    pro.execute(command,arg);
    pro.start(command);
    pro.waitForStarted();
    pro.waitForReadyRead();
    pro.waitForFinished();

    QByteArray qa=pro.readAll();
    QString reply=QString::fromUtf8(qa);
    qDebug() << reply;

    return a.exec();
}
2. perl dbpediaPlaceData.txt 'Haeinsa'
void processPerl()
{
    QString command = "perl";
    QString fileName ="/Users/yoshimi/dbpediaPlaceData.txt ";
    QString cmd = "perl" + fileName + "Haeinsa";

    QProcess* process_screen = new QProcess();
    process_screen->start(cmd);

    process_screen->waitForStarted();
    QByteArray q=process_screen->readAll();
    QString replyB=QString::fromUtf8(q);
    qDebug() << replyB;

}
c++ qt curl qt5 qprocess
1个回答
1
投票

根据我的理解,你想用QProcess实现命令,所以主要的难点是实现管道:|,在这种情况下你必须使用setStandardOutputProcess()

QProcess curlProcess;
QProcess perlProcess;
QString filename = "/Users/yoshimi/Music/cridb/dbpediaPlaceData/dbpediaPlaceData.txt";
curlProcess.setStandardOutputProcess(&perlProcess);
curlProcess.start("curl", {"-s", "http://dbpedia.org/data/Haeinsa.json"});
if (curlProcess.waitForFinished()){
    perlProcess.start("perl", { filename, "Haeinsa"});
    if(perlProcess.waitForFinished()){
        qDebug()<< perlProcess.readAll();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.