繁体   English   中英

由PHP生成为进程时未找到ROS catkin_init_workspace

[英]ROS catkin_init_workspace not found when spawned as process by PHP

让我详细说明一下:我试图使用proc_open从PHP生成catkin_init_workspace如下所示:

touch( "$dir/stderr.txt" );
chmod( "$dir/stderr.txt", 0755 );
$fp = fopen("$dir/stderr.txt", "w");
fclose($fp);

$descr = array(
                0 => array("pipe", 'r'), // stdin
                1 => array("pipe", 'w'), // stdout
                2 => array("file", "$dir/stderr.txt", "w")to file
              );

$pid = proc_open( "catkin_init_workspace", $descr, $pipes, $dir );

if (!is_resource( $pid) ) 
    throw new Exception ( "`catkin_init_workspace` exec failed");

else if ( is_resource( $pid ) )
{   
    fclose( $pipes[1] );
    $retval = proc_close( $pid );
}

上面的代码已与CMake,GCC和其他应用程序一起使用。 但是,当我使用catkin_init_workspace尝试此操作时,我得到:

sh: 1: catkin_init_workspace: not found

现在,据我了解,catkin_init_workspace是位于以下位置的python脚本:

/opt/ros/indigo/bin/catkin_init_workspace

我尝试使用绝对路径直接调用它,但这没有用。

作为用户,一切正常。 但是,当我通过www-data执行Apache2的用户/组设置时,却没有。

ROS教程说明,我需要通过运行以下命令来设置环境变量

source /opt/ros/indigo/setup.bash

在调用proc_open之前,我也尝试通过PHP进行此操作,但无济于事。 我的理解是我需要正确设置环境变量。

出口| grep ROS

说明:

declare -x ROSLISP_PACKAGE_DIRECTORIES="/home/alex/Projects/ros_ws/devel/share/common-lisp"
declare -x ROS_DISTRO="indigo"
declare -x ROS_ETC_DIR="/opt/ros/indigo/etc/ros"
declare -x ROS_MASTER_URI="http://localhost:11311"
declare -x ROS_PACKAGE_PATH="/home/alex/Projects/ros_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks"
declare -x ROS_ROOT="/opt/ros/indigo/share/ros"
declare -x ROS_TEST_RESULTS_DIR="/home/alex/Projects/ros_ws/build/test_results"

我需要设置www-data才能正确调用catkin的那些环境变量吗?

如果是这样,如何将这些变量作为env数组传递给PHP的proc_open?

正如您已经知道的那样,必须预先调用source /opt/ros/indigo/setup.bash ,否则将无法设置您的环境来查找ROS命令。

当您在PHP中进行此操作时,我猜您在调用proc_open("catkin_init_workspace", ...)之前使用了类似的proc_openexec调用之类的东西?
这样,可能只为该单个调用设置了环境,只有在另一个proc_open catkin_init_workspace中运行catkin_init_workspace ,环境proc_open

可能的解决方案

我现在无法在此处进行测试(未安装PHP),但是以下方法可以工作:

  1. 创建一个具有以下内容的简单bash脚本:

     #!/bin/bash source /opt/ros/indigo/setup.bash catkin_init_workspace 
  2. 在PHP中,请调用此脚本而不是catkin_init_workspace

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM