簡體   English   中英

無法從 php 運行 python 腳本

[英]Unable to run python script from php

我正在使用本地 Web 服務器 (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

您需要檢查 Apache 日志中是否有任何錯誤輸出或正在發生的事情的指示。 否則很難確定,這只是猜測。

但是根據您更新的問題,問題似乎是您沒有向網絡用戶提供 ROS 環境。 即,當網絡服務器運行您的 Python 腳本時,/opt/ros/$ROSDISTRO/setup.bash 不是來源。 這將使例如import rospy失敗,因此您的腳本。

您應該更改您的設置,以便 Python 解釋器在被調用時知道在哪里可以找到rospy 這意味着將適當的路徑添加到PYTHONPATH變量(在終端上獲取 setup.bash 后執行echo $PYTHONPATH以查看應附加的內容)。 您可能需要設置其他環境變量,例如 ROS_ROOT 或類似的(檢查錯誤輸出,然后比較printenv | grep ROS )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM