質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1461閲覧

pythonスクリプトをPHPから実行

ROONIN

総合スコア22

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/03 07:29

色々調べた結果どーしても分からず技術者の方に教えていただきたいです

やりたいこと
ラズパイにapcheサーバーを立て、配下フォルダに
PHPとptyhonを入れてあります

phpは、pytonで生成されたファイルを使い表示と操作用
ptyhonは、GPIOピン番号の0,1データを受信してファイル生成

それぞれ作り、どちらとも問題なく動きましたので

いざ、WEBからボタンを押して、AJAX経由で
pythonを実行しようとしたら
実行されません

PHP

1if($_REQUEST['p']){ 2 $cmd = "export LANG=ja_JP.UTF-8; python /home/pi/web_severs/GPIO_TEST/gpio_test.py"; 3 $re = exec($cmd); 4 echo($re); 5 exit(); 6}

python

1#! /usr/bin/env python3 2#-*- coding: utf-8 -*- 3 4# GPIOを制御するライブラリ 5import wiringpi 6# タイマーのライブラリ 7import time 8# CSVのライブラリ 9import csv 10#ファイル削除のライブラリー 11import os 12 13path_w = '/home/pi/web_severs/GPIO_TEST/test.txt' 14ID = 'test' 15# ボタンを繋いだGPIOの端子番号 16button_pin = [2,3,4,14] # 3ピン端子 17 18# GPIO初期化 19wiringpi.wiringPiSetupGpio() 20# GPIOを出力モード(1)に設定 21 22# whileでtrueを条件式で書くと無限ループになる 23while True: 24 if os.path.exists(path_w): 25 os.remove(path_w) 26 else: 27 for num in range(4): 28 wiringpi.pinMode( button_pin[num], 0 ) 29# 端子に何も接続されていない場合の状態を設定 30# 3.3Vの場合には「2」(プルアップ) 31# 0Vの場合は「1」と設定する(プルダウン) 32 wiringpi.pullUpDnControl( button_pin[num], 2 ) 33 # GPIO端子の状態を読み込む 34 # ボタンを押すと「0」、放すと「1」になる 35 # GPIOの状態が0V(0)であるか比較 36 if( wiringpi.digitalRead(button_pin[num]) == 0 ): 37 # 0V(0)の場合に表示 38 with open(path_w,mode='a') as f: 39 f.write(ID + '_1' + '\n') 40 else: 41 # 3.3V(1)の場合に表示 42 with open(path_w,mode='a') as f: 43 f.write(ID + '_0' + '\n') 44 time.sleep(1)

その前にテストで PHPから 
print('test')みたいな簡単な出力を
試したらPHPに問題なく出力されたので
いける!と思ったのですが・・・

exec関数でスクリプト実行だと思ったんですが
そもそもやり方が違うのか・・
逆になんで簡単なスクリプトは実行できたんだ・・と迷宮入りです。

ご教授を宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/02/03 08:02

Apacheのエラーログに何か出てませんか?
ROONIN

2020/02/03 08:41

Traceback (most recent call last): File "/home/pi/web_severs/GPIO_TEST/gpio_test.py", line 5, in <module> import wiringpi ImportError: No module named 'wiringpi' これは、importエラーですね。。 GPIOを操作できるライブラリーができてないから 何も動かないということですか??
otn

2020/02/03 08:51

↑それって、python 2が動いた時では? python3の時のエラーメッセージを書いてください。
ROONIN

2020/02/03 08:55

ImportError: /usr/local/lib/python3.5/dist-packages/wiringpi2-1.1.1-py3.5-linux-armv7l.egg/_wiringpi2.cpython-35m-arm-linux-gnueabihf.so: undefined symbol: PyString_FromStringAndSize Traceback (most recent call last): File "/home/pi/web_severs/GPIO_TEST/gpio_test.py", line 27, in <module> os.remove(path_w) PermissionError: [Errno 13] Permission denied: '/home/pi/web_severs/GPIO_TEST/202.103.1.213.txt' なぜか時間がついてなかったので 3に変えてから、一度ボタンを押したら このようなエラーがでました
otn

2020/02/03 09:11

それが原因です。
guest

回答3

0

自己解決

apacheのエラーログのおかげで解決できました
教えていただいた方をベストアンサーにしたかったんですが
できなかったのでお礼と感謝します
ありがとうございます。

パーミッションエラーで ファイルの権限を変えてできたら
ブラウザーから ラズパイのptyhon起動
while文の中に停止トリガーを仕込ませて
ブラウザーから ラズパイのptyhon終了

により、思った通りの動きができました。
今回の事で、phpからラズパイを操作できる方法が理解できたので
日々精進し、プログラミングを行いたいと思います。

投稿2020/02/04 01:17

ROONIN

総合スコア22

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Pythonコマンドのパスが気になります。

which python3でパスを確認して、

$cmd = "export LANG=ja_JP.UTF-8; 【python3の場所】/python3 /home/pi/web_severs/GPIO_TEST/gpio_test.py";

にしてはどうでしょうか?

投稿2020/02/03 08:02

kota_yamashita

総合スコア356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ROONIN

2020/02/03 08:43

何も変わりませんでしたが apacheエラーを見ないさいというご指摘をいただき Traceback (most recent call last): File "/home/pi/web_severs/GPIO_TEST/gpio_test.py", line 5, in <module> import wiringpi ImportError: No module named 'wiringpi' importエラーが大量に出てました これが原因ぽいです
kota_yamashita

2020/02/03 09:22

`pip3 install wiringpi` でしたらwiringpiをインストールすればいいかと思います。
ROONIN

2020/02/03 09:58

Traceback (most recent call last): File "/home/pi/web_severs/GPIO_TEST/gpio_test.py", line 5, in <module> import wiringpi ImportError: No module named wiringpi phpからアクセスするとこれがでるのですが pip3 install wiringp行っており python3の対話式で import wiringpiもできたので できるてるはずですが 間違っているのでしょうか??
guest

0

まさかとは思いますが、pythonコマンドでPython 2が実行される環境ではありませんか?

python ファイル名のように実行する場合、シバンは関係しません。

投稿2020/02/03 07:33

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ROONIN

2020/02/03 07:43

$ python -V Python 2.7.13 $ python3 -V Python 3.5.3 今、調べたら 両Ver入ってました 3系しか入れてないはずが・・ これのせいですか??
maisumakun

2020/02/03 07:47

実行コマンドをpython3に書き換えたらどうなりますか? > 3系しか入れてないはずが・・ ディストリビューションによっては、付属のツール自体がPython 2で組まれているため勝手に入る、ということもあります。
ROONIN

2020/02/03 07:51

そうなんですか・・ 言われた通りに if($_REQUEST['p']){ $cmd = "export LANG=ja_JP.UTF-8; python3 /home/pi/web_severs/GPIO_TEST/gpio_test.py"; $re = exec($cmd); echo($re); exit(); } 変えてみましたが スクリプト実行されません
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問