我正在使用本地Web服务器(LAMP)。 当使用参数" /script.py传递shell_exec / exec / system时传递_arg [1]传递_arg [2]"没有回报价值,没有任何反应。
我通过chmod 777删除了权限,并且不可读的文件(readdir()返回true)。
我消除了Apache配置问题(php.ini disable_functions没有shell_exec / exec且没有安装模式)。
当试图运行打印hello的其他脚本时,一切正常。
我认为这是脚本内容的问题。 我在ROS中使用catkin工作区,但即使将脚本复制到/ 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
答案 0 :(得分:0)
您需要检查Apache日志中是否有任何错误输出或指示发生了什么。否则很难说肯定而且它只是猜测工作。
但根据您更新的问题,问题似乎是您没有向Web用户提供ROS环境。即当webserver运行Python脚本时,不会获取/opt/ros/$ROSDISTRO/setup.bash。这将使例如import rospy
失败,因此你的脚本失败了。
您应该更改您的设置,以便在调用python解释器时知道在哪里找到rospy
。这意味着在PYTHONPATH
env变量上添加适当的路径(在终端上获取setup.bash后执行echo $PYTHONPATH
以查看应该追加的内容)。您可能需要设置其他env变量,例如ROS_ROOT或类似(检查错误输出,然后比较printenv | grep ROS
)。