如何从php运行Python脚本

时间:2018-03-09 08:44:43

标签: php python linux bluetooth raspberry-pi3

我想从php运行python脚本。 这是我的python代码。它保存在/ home / pi中,文件名是hello.py

#! /usr/bin/python

import bluetooth

bd_addr="xx:xx:xx:xx:xx:xx"
port=1
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr.port))
data=""
while 1:
  try:
    data +=sock.recv(1024)
    data_end=data.find('\n')
    if data_end!=-1:
      rec=data[:data_end]
      print datas
      data=data[data_end+1:]
    except KeyboardInterrupt:
      break

这是我的PHP代码。它保存在/ var / www / html中,文件名是php.php

<?php
$output=shell_exec('ls -l /home/pi/hello.py');
echo "<pre>$output</pre>";
?>

我在chrome中插入localhost / php.php,显示

-rw-r-r- 1 pi pi 378 Mar 8 12:07 /home/pi/hello.py

问题是什么?

2 个答案:

答案 0 :(得分:1)

ls命令用于列出目录中的文件或获取有关文件的信息。你是ls - 你的python文件,结果是正确的。它为您提供有关该文件的信息。

只需将文件名放在shell_exec /home/pi/hello.py内。如果您不想依赖于shebang并且shell环境中提供了python命令,那么您可以使用python /home/pi/hello.py代替裸/home/pi/hello.py

同样,您使用变量datasprint,并打算使用data - 修复它。

  

php代码:

<?php
$output=shell_exec('python /home/pi/hello.py');
echo "<pre>$output</pre>";
?>
  

或:

<?php
$output=shell_exec('/home/pi/hello.py');
echo "<pre>$output</pre>";
?>
  

python代码:

#! /usr/bin/python

import bluetooth

bd_addr="xx:xx:xx:xx:xx:xx"
port=1
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM)
sock.connect((bd_addr.port))
data=""
while 1:
  try:
    data +=sock.recv(1024)
    data_end=data.find('\n')
    if data_end!=-1:
      rec=data[:data_end]
      print data
      data=data[data_end+1:]
    except KeyboardInterrupt:
      break

答案 1 :(得分:1)

正如乔恩斯特林所指出的,你正在使用&#34; ls&#34;仅列出文件夹的内容或检查该文件夹中是否存在该文件。要运行Python代码,您需要将PHP文件更改为以下内容:

<?PHP
$output=shell_exec('./hello.py');
echo "<pre>$output</pre>";
?>