【问题标题】:Unable to run python script from php无法从 php 运行 python 脚本
【发布时间】:2017-05-22 10:18:44
【问题描述】:

我正在使用本地网络服务器 (LAMP)。 当使用参数“/script.pypassed_arg[1]passed_arg[2]”运行shell_exec/exec/system时,没有返回值,也没有任何反应。

我通过 chmod 777 消除了权限,并且文件不可读(readdir() 恢复为真)。

我消除了 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

【问题讨论】:

  • 运行脚本的 PHP 代码在哪里?
  • /var/www/html/ 保存上述脚本的相同目录
  • 我的意思是你需要显示我们你用来调用python脚本的PHP代码。顺便说一句,更重要的是,当您从命令行调用它时,您的 python 脚本是否可以工作,或者您是否有同样的问题?

标签: php python lamp ros catkin


【解决方案1】:

您需要检查 Apache 日志以了解任何错误输出或正在发生的事情的指示。否则很难确定,只是猜测。

但是根据您更新的问题,问题似乎是您没有向网络用户提供 ROS 环境。 IE。 /opt/ros/$ROSDISTRO/setup.bash 在网络服务器运行您的 Python 脚本时没有被获取。这将使例如import rospy 失败,因此你的脚本。

您应该更改您的设置,以便在调用 python 解释器时知道在哪里可以找到rospy。这意味着将适当的路径添加到 PYTHONPATH env 变量(在终端上获取 setup.bash 后执行 echo $PYTHONPATH 以查看应该附加的内容)。您可能需要设置其他环境变量,例如ROS_ROOT 或类似(检查错误输出然后比较printenv | grep ROS)。

【讨论】:

  • 感谢您的回答!我不小心删除了前导斜杠。在原始代码中,就像你回答的那样。我更新了。
  • 好的,不是那样的。我已经用第二种可能的可能性更新了我的答案,但您确实应该检查网络服务器日志以了解实际错误或正在发生的事情的指示。
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-06
  • 1970-01-01
  • 1970-01-01
  • 2013-11-13
相关资源
最近更新 更多