Я использую локальный веб-сервер (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
Вам необходимо проверить журналы 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
).
Других решений пока нет …