无法从php运行python脚本

时间:2017-01-07 20:35:39

标签: php python lamp ros catkin

我正在使用本地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

1 个答案:

答案 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)。