2016-05-16 10 views
1

私は数日間立ち往生しました。 PHPから単純なPythonスクリプトを呼び出そうとしています。私の人生にとって、私は問題が何であるか把握できません。 chmod + xでonoff.pyスクリプトを実行可能にしました。PHPでPythonスクリプトを呼び出すことができません

私はこのようなコマンドラインからうまくスクリプトを実行することができます:私はPHPからスクリプトを呼び出すしようとすると、

[email protected]:/var/www/html $ python onoff.py 
LED on 
LED off 

私の問題があります。私は何も得られない。

私のPythonスクリプト:

#!/usr/bin/python 
import RPi.GPIO as GPIO 
import time 
GPIO.setmode(GPIO.BCM) 
GPIO.setwarnings(False) 
GPIO.setup(18,GPIO.OUT) 
print "LED on" 
GPIO.output(18,GPIO.HIGH) 
time.sleep(1) 
print "LED off" 
GPIO.output(18,GPIO.LOW) 

私のPHPスクリプト:すべてのヘルプは大歓迎です

<?php 
$command = escapeshellcmd('python /var/www/html/onoff.py'); 
$output = shell_exec($command); 
echo $output; 
?> 

EDIT:

のようなループしながら、私はシンプルに自分のonoff.pyスクリプトを変更した場合:ブラウザ上で

#!/usr/bin/python 
x=1 
while (x<10): 
    print x 
    x=x+1 

出力は次のとおりです。

1 2 3 4 5 6 7 8 9 

Iちょうどドンループが実行される理由を理解していませんが、元のPythonコードでは出力が得られません。

EDIT 2:

[OK]をので、私は別のアプローチを取って、コードが失敗した場所を確認しようとしています。私はコードのビットを一度に追加しています。以下をご覧ください。

#!/usr/bin/python 
import random 
import time 
import RPi.GPIO as GPIO 

randomNumber = random.randint(1, 20) 
GPIO.setmode(GPIO.BCM) 
#GPIO.setup(18,GPIO.OUT) 
print randomNumber 

ここでPHPを実行すると、乱数が表示されるので、pythonスクリプトが実行されていることがわかります。 GPIO.setup(18、GPIO.OUT)のコメントを外してPHPを実行すると、空白の画面が表示されます。なぜこのスクリプトが失敗するのかわかりません。

+1

義務参照:[exec()の問題をどのようにデバッグできますか?](http://stackoverflow.com/q/12199353) – mario

答えて

0

スクリプトの前にpythonを使用する必要があります。:

$command = escapeshellcmd('python /var/www/html/onoff.py'); 

それが動作しない場合は、パイソンおそらくins't上apacheユーザーのPATH、あなたは完全なを見つけるためにwhichを使用し、pythonバイナリへのフルパスを使用する必要がありますパス:

which python 
//usr/bin/python 

使用その値:

$command = escapeshellcmd('/usr/bin/python /var/www/html/onoff.py'); 

注:$command a)の場合

  • は、Apache useronoff.py
+0

これも試しました。まだ動かない。 – Caseyamn

+0

pi @ raspberrypi:〜$ which python /usr/bin/python – Caseyamn

+0

'onoff.py'の権限は何ですか? –

1

shell_exec()に実行権限を持っていることを確認してくださいだけで文字列を返します。蘭はOKで、b)と仮定します。それがSTDOUTへの応答を吐き出すということです。

exec()を使用し、そのコマンドに整数$codeと空の配列$responseを渡してください。どちらも参照によって引数としてPHPによって処理されます。

ため、あなたのコマンドを実行します。

$command = escapeshellcmd('/path/to/python /var/www/html/onoff.py'); 
$response = array(); 
$code = 0; 
exec($command, $response, $code); 
var_dump($code, $response); 
die; 

あなたは今、内部でPHPに与えられていると、なぜPythonスクリプトが動作していない実際であるかを確認する必要があります。

+0

私は、PHPページを読み込むときに出力を変更しました:int(1)array(0){ } – Caseyamn

+0

Hmmm「私のために働く」と申し訳ありません(実際にはCLIコマンドにユーザー入力が含まれている場合は実際に使用されています) #> php -a $ cmd = '/ usr/bin/python /path/to/test.py '; $ code = 0; $ res = []; exec($ cmd、$ res、$ code); var_dump($ code、$ res); ダイ; – theruss

関連する問題