2017-01-07 12 views
-2

ローカルWebサーバー(LAMP)を使用しています。 パラメータ "/script.py passed_arg [1] passed_arg [2]"を指定してshell_exec/exec/systemを実行すると、戻り値はなく、何も起こりません。PHPからPythonスクリプトを実行できません

私はchmod 777によってアクセス許可を取り除きました。読み取り不可能なファイル(readdir()が本当に戻ってきました)。

私はApacheの設定上の問題を取り除きました(php.ini disable_functionsにはshell_exec/execとsafemodeがありません)。

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

スクリプトを実行するPHPコードはどこにありますか? –

+0

/var/www/html/ 上記のスクリプトを保持しているのと同じディレクトリ –

+0

私はあなたがpythonスクリプトを呼び出すために使用しているPHPコードを_show_する必要があることを意味します。 Btw、もっと重要なのは、コマンドラインからPythonスクリプトを呼び出すか、同じ問題があるのでしょうか? –

答えて

0

あなたは何が起こっているかのいずれかのエラー出力または表示のためのApacheのログをチェックする必要があります。そうでなければ、確かに言うことは難しく、それはちょうど仕事を推測している。

しかし、あなたの更新された質問に基づいて、WebユーザーにROS環境を提供していない可能性があります。私。 /opt/ros/$ROSDISTRO/setup.bashは、WebサーバーがPythonスクリプトを実行しているときにはソースになっていません。これにより、 import rospyが失敗し、スクリプトが失敗します。

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

+0

お返事ありがとうございます! 私は誤ってスラッシュを削除しました。私はそれを更新しました。 –

+0

さて、そうではありません。私は2番目の可能性のある可能性で私の答えを更新しましたが、本当に何が起こっているのか、実際のエラーや兆候についてウェブサーバーのログをチェックする必要があります。 – dseifert

関連する問題