【问题标题】:how to run Python script from php如何从 php 运行 Python 脚本
【发布时间】:2018-03-09 17:14:20
【问题描述】:

我想从 php.ini 运行 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

有什么问题??

【问题讨论】:

  • 认真的吗?它工作正常,您正在运行 ls (list) 命令,而不是 python。想将它作为 python 运行吗?调用 python 二进制文件。
  • 如何调用python二进制文件??

标签: php python linux bluetooth raspberry-pi3


【解决方案1】:

正如 Jon Stirling 所指出的,您正在使用“ls”来仅列出文件夹的内容或检查该文件夹中是否存在文件。要运行 Python 代码,您需要将 PHP 文件更改为如下内容:

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

【讨论】:

  • 感谢您的回答先生。我按照你的回答,但网络服务器显示 403-Forbidden what's wrong to me?
  • 可能你有权限问题。你需要设置 chmod a+x filename.php
  • 是权限问题吗?我创建了新的 php 文件 并在网络浏览器中显示 Hi,但不显示 python 脚本的输出。
  • 尝试在使用 ssh 的服务器上使用“./hello.py”运行 python 代码。如果它有效,那么它也应该在 PHP 中有效。如果不起作用,请尝试使用“python hello.py”
  • 在对 Python 可以做但 PHP 做不到的事情进行这种实践时,是否会存在重大的健壮性或可扩展性问题?
【解决方案2】:

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

只需将文件名放在shell_exec 中,即/home/pi/hello.py。如果您不想依赖 shebang 并且您的 shell 环境中可以使用命令 python,那么您可以使用 python /home/pi/hello.py 而不是裸露的 /home/pi/hello.py

再次,您在打算使用 data 的地方使用了变量 datasprint - 修复它。


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

【讨论】:

    猜你喜欢
    • 2013-11-13
    • 2012-06-11
    • 2017-01-10
    • 2019-05-27
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多