从Qt C ++控制ubuntu终端

时间:2018-03-26 15:25:09

标签: c++ qt ubuntu

我想编写一个例程,它会自动更改我的机器学习参数并多次执行(机器学习)代码并将其结果保存到文本文件中。

机器学习代码从Ubuntu终端运行,其结果也写入Ubuntu终端。

我需要一种从C ++代码读取数据并将数据写入Ubuntu终端的方法。

到目前为止我发现的是QProcess:

QProcess process;
process.start("gnome-terminal"); //THE TERMINAL IS OPENED INDEED
char w[] = "write";
process.write(w,sizeof(w));
process.waitForFinished();

但没有任何内容可以写入或从中读取

工作是什么:

  QProcess process1;
  QProcess process2;
  process1.setStandardOutputProcess(&process2);
  process1.start("echo 0534230313");
  process2.start("sudo -S poweroff");
  process2.setProcessChannelMode(QProcess::ForwardedChannels);

这也有效:

int result = system("echo 0534230313 | sudo -S poweroff"); ///COMMANDS TO TERMINAL
int result2 = system("gnome-terminal"); ///OPEN TERMINAL

但问题是我无法读取输出结果(我的机器学习程序可以自己打开并写入终端)

1 个答案:

答案 0 :(得分:0)

使用finished信号读取过程输出结果

connect( poProcess, static_cast<void (QProcess::*)(int,QProcess::ExitStatus)>(&QProcess::finished),
         [=](int,QProcess::ExitStatus)
{
    QByteArray oProcessOutput=
            poProcess->readAllStandardOutput();

    // Parse the process output.
    //

    // Mark process for deletion.
    emit poProcess->deleteLater();
});