QProcess未能启动进程:没有找到进程。

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

我使用的是 QProcess 为了在我的 Ubuntu 18.04 OS.而在翻阅了文档后,我发现 QProcess 是最好的办法。问题是 我有一个问题是,我试图通过以下方式启动一个应用程序 QPushButton 在一个最小的图形用户界面上,但它不工作,并且 误区 我从编译器得到的是

启动激光雷达APP [EXEC] FINISHED: 0 QProcess::NormalExit [EXEC] buffered DATA: "roslaunch: no process found\nhomeemanuelecatkin_docking_wssrclidarboatsprojectstart_lidar_deck_rosbag.sh: 5: homeemanuelecatkin_docking_wssrclidarboatsprojectstart_lidar_deck_rosbag.sh: roslaunch: not found\n"

这是我试图启动的启动文件。start_lidar_deck_rosbag.sh:

#!/bin/bash

killall roslaunch && sleep 10
cd /home/emanuele/catkin_docking_ws/
roslaunch lidar_deck lidar_deck_rosbag.launch &

在最小GUI下面。

lau

mainwindow.h

class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void startLidar();

private slots:
    void on_launchLidarROSBtn_clicked();

private:
    Ui::MainWindow *ui;
    QProcess *executeROSLidarApp;

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    startLidar();
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::startLidar()
{
    // Execution of the QProcess to make sure Lidar App Launcher opens:
    this->executeROSLidarApp = new QProcess(this);
    this->executeROSLidarApp->setProcessChannelMode(QProcess::MergedChannels);
    connect(this->executeROSLidarApp, QOverload<int, QProcess::ExitStatus>::of(&QProcess::finished),
            [script = this->executeROSLidarApp](int exitCode, QProcess::ExitStatus exitStatus){
            qDebug() << "[EXEC] FINISHED: " << exitCode << exitStatus;
            if(script->bytesAvailable() > 0) qDebug() << "[EXEC] buffered DATA:" << script->readAll();
    });
    connect(this->executeROSLidarApp, &QProcess::errorOccurred, [script = this->executeROSLidarApp](QProcess::ProcessError error) {
            qDebug() << "[EXEC] error on execution: " << error << script->errorString();
    });
}


void MainWindow::on_launchLidarROSBtn_clicked()
{
    qDebug() << "Launching LIDAR APP";
    this->executeROSLidarApp->start(QStringLiteral("/bin/sh"), QStringList() << QStringLiteral("/home/emanuele/catkin_docking_ws/src/lidarboatsproject/start_lidar_deck_rosbag.sh"));
}

为了解决这个问题,我研究了很多可能的解决方案.我咨询了很多人。此职位这个. 他们是有用的设置主卡盘的想法,但由于某些原因,我不能赶上的过程似乎不启动,我不明白为什么编译器给出的错误,我上面提到的,如果我确定该文件100%存在。

proc

请大家指点迷津,并指出解决这个问题的正确方向。

c++ qt qt5 ros qprocess
1个回答
0
投票

你的代码正在正确执行,它正在启动。/bin/sh 并执行脚本,并且顺利完成,没有错误。是你的脚本出了问题。

以下是你可以尝试的一些方法。

  • 确保进程 roslaunch 存在,这就是明显的错误
  • 你的剧本以 #!bin/bash但你正在执行 /bin/shQProcess. 改成 #!/bin/sh

PS:

你不需要做

 QStringList() << QStringLiteral("/home/emanuele/catkin_docking_ws/src/lidarboatsproject/start_lidar_deck_rosbag.sh")

而不是使用 initializer_list 语法。

 QStringList({"/home/emanuele/catkin_docking_ws/src/lidarboatsproject/start_lidar_deck_rosbag.sh"});
© www.soinside.com 2019 - 2024. All rights reserved.