【问题标题】:Control ubuntu terminal from Qt C++从 Qt C++ 控制 ubuntu 终端
【发布时间】:2018-03-26 15:25:08
【问题描述】:

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

机器学习代码从 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

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

【问题讨论】:

  • 这里为什么会涉及到 gnome-terminal?

标签: c++ qt ubuntu


【解决方案1】:

使用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();
});

【讨论】:

  • 好的,我该如何启动进程(以便 c++ 程序知道进程已启动)?或者你的意思是我可以使用 process.start 方法并且它可以使用它?
  • 可以,使用启动方式,也可以连接started信号,表示进程已经启动。
  • @iliagildin,您在这个问题上需要更多帮助吗?
猜你喜欢
  • 2011-10-21
  • 2020-12-02
  • 2013-03-29
  • 2021-03-01
  • 2016-07-07
  • 1970-01-01
  • 2012-10-06
  • 1970-01-01
  • 2018-06-20
相关资源
最近更新 更多