Невозможно запустить скрипт Python из переполнения стека

Я использую локальный веб-сервер (LAMP).
При запуске shell_exec / exec / system с параметром «/script.py pass_arg [1] pass_arg [2]» возвращаемое значение отсутствует и ничего не происходит.

Я устранил разрешения с помощью chmod 777 и нечитаемый файл (readdir () вернул true).

Я устранил проблемы с настройкой Apache (php.ini disable_functions не имеет shell_exec / exec и не имеет безопасного режима).

при попытке запустить другой скрипт, который печатает привет все работает нормально.

Я думаю, что это проблема с содержанием скрипта.
Я использую рабочую область catkin в ROS, но даже при копировании сценария в / var / www / html / он не работает (выполнение точно такой же команды в терминале работает отлично).

При комментировании всех команд ros (в частности, «import rospy») это работает (все, что от него осталось).

Содержание скрипта:

#!/usr/bin/env python

## Simple talker demo that published std_msgs/Strings messages
## to the 'chatter' topic

import sys
import rospy
from std_msgs.msg import String

def talker():
X_Coordinate = float(sys.argv[1])
Y_Coordinate = float(sys.argv[2])
Guest_First_Name = sys.argv[3]
Guest_Last_Name = sys.argv[4]
Office_Name = sys.argv[5]
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('talker', anonymous=True)
rate = rospy.Rate(10)
hello_str = "go_to "+ str(X_Coordinate)+" "+str(Y_Coordinate)+"     "+Guest_First_Name+" "+Office_Name
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()

if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass

-2

Решение

Вам необходимо проверить журналы Apache на наличие ошибок или указание того, что происходит. В противном случае это трудно сказать наверняка, и это просто угадать работу.

Но, судя по вашему обновленному вопросу, проблема заключается в том, что вы не предоставляете среду ROS веб-пользователю. То есть /opt/ros/$ROSDISTRO/setup.bash не получен, когда веб-сервер запускает ваш скрипт Python. Это сделает, например, import rospy потерпеть неудачу и, следовательно, ваш сценарий.

Вы должны изменить настройки так, чтобы интерпретатор python при вызове знал, где найти rospy, Это будет означать добавление соответствующего пути к PYTHONPATH переменная env (do echo $PYTHONPATH после поиска на терминале setup.bash, чтобы увидеть, что должно быть добавлено). Вам может потребоваться установить другие переменные env, например, ROS_ROOT или аналогичный (проверьте вывод ошибки и затем сравните printenv | grep ROS).

0

Другие решения

Других решений пока нет …