-2

ローカル Web サーバー (LAMP) を使用しています。パラメータ「/script.py passed_arg[1] passed_arg[2]」を指定して shell_exec/exec/system を実行すると、戻り値がなく、何も起こりません。

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
4

1 に答える 1

0

Apache ログで、エラー出力や何が起こっているのかを確認する必要があります。それ以外の場合は、確実に言うのは難しく、推測に過ぎません。

しかし、更新された質問に基づいて、問題は、ROS 環境を webuser に提供していないことにあるようです。つまり、/opt/ros/$ROSDISTRO/setup.bash は、Web サーバーが Python スクリプトを実行するときに読み込まれません。これにより、たとえばimport rospy失敗するため、スクリプトが失敗します。

Python インタープリターが呼び出されたときにどこを見つけるかを知るように、セットアップを変更する必要がありますrospyPYTHONPATHこれは、 env 変数に適切なパスを追加することを意味します (echo $PYTHONPATH追加する必要があるものを確認するには、端末で setup.bash をソースした後に実行します)。ROS_ROOT などの他の環境変数を設定する必要がある場合があります (エラー出力を確認してから比較してくださいprintenv | grep ROS)。

于 2017-01-07T23:13:22.893 に答える