Позвольте мне уточнить: я пытаюсь запустить catkin_init_workspace из PHP, используя proc_open следующим образом:
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-данные, настройку пользователя / группы для Apache2.
Учебное пособие по ROS объясняет, что мне нужно настроить переменные среды, запустив
source /opt/ros/indigo/setup.bash
Который я также пытался делать через PHP, прямо перед тем, как я вызываю proc_open, но безрезультатно. Я понимаю, что мне нужно правильно настроить переменные среды.
дела
экспорт | 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 в proc_open PHP, эти переменные?