在PHP中调用Python

llycmphe  于 2022-12-21  发布在  PHP
关注(0)|答案(9)|浏览(131)

我最近写了一个Python脚本,我使用命令行和一些选项调用它。我现在想要一个非常薄的Web界面在我的Mac上本地调用这个脚本。
我不想在Mac上安装mod_python或mod_wsgi时遇到一些小麻烦,所以我只想在PHP中执行system()或popen()来调用Python脚本。
有更好的主意吗?

1szpjjfi

1szpjjfi1#

根据您的操作,system()popen()可能是最佳选择。如果Python脚本没有输出,或者希望Python脚本的输出直接转到浏览器,则使用popen。()(如果要将数据写入Python脚本的标准输入,或从php. popen中Python脚本的标准输出读取数据()只会让你读或写,但不能两者都读。如果你想两者都读,请查看proc_open(),但对于程序之间的双向通信,你需要小心避免死锁,即每个程序都在等待另一个程序做一些事情。
如果你想把用户提供的数据传递给Python脚本,那么最需要注意的就是命令注入,如果你不小心,你的用户可能会向你发送像“;坏命令;“并使您的程序违背您的意愿执行任意命令。
escapeshellarg()escapeshellcmd()可以帮助实现这一点,但我个人喜欢删除所有不是已知良好字符的内容,例如

preg_replace('/[^a-zA-Z0-9]/', '', $str)
b09cbbtk

b09cbbtk2#

shell_exec()操作符还允许您使用与上面类似的语法运行python脚本
在一个名为www.example.com的python文件中python.py:

hello = "hello"
world = "world"
print hello + " " + world

在一个名为python.php的php文件中:

$python = shell_exec(python python.py);
echo $python;
3htmauhk

3htmauhk3#

你可以通过php运行python脚本,并在浏览器上输出。
基本上你必须这样调用python脚本:

$command = "python /path/to/python_script.py 2>&1";
$pid = popen( $command,"r");
while( !feof( $pid ) )
{
 echo fread($pid, 256);
 flush();
 ob_flush();
 usleep(100000);
}
pclose($pid);

注意:如果你在你的python代码中运行任何time.sleep(),它不会在浏览器上输出结果。
有关完整代码的工作情况,请访问How to execute python script from php and show output on browser

eivnm1vs

eivnm1vs4#

我一直在为快速和肮脏的脚本做这类事情。CGI或PHP脚本只使用system/popen调用一些外部程序是很常见的。
如果你的网络服务器对互联网是开放的,要格外小心。在这种情况下,一定要清理你的GET/POST输入,以免攻击者在你的机器上运行任意命令。

jtw3ybtb

jtw3ybtb5#

你的call_python_file. php应该看起来像这样:

<?php
    $item='Everything is awesome!!';
    $tmp = exec("py.py $item");
    echo $tmp;
?>

这将执行python脚本并将结果输出到浏览器.在python脚本中,(sys.argv[1:])变量将带入所有参数.如果你想在文本区域中显示php从哪里拉取的argv:

import sys

list1 = ' '.join(sys.argv[1:])

def main():
  print list1

if __name__ == '__main__':
    main()
iyr7buue

iyr7buue6#

上面的方法似乎比较复杂,请参考我的方法。
我有两份文件
run.php
mkdir.py
在这里,我创建了一个html页面,其中包含GO按钮。每当你按下这个按钮,一个新的文件夹将在你提到的路径目录中创建。
run.php

<html>
 <body>
  <head>
   <title>
     run
   </title>
  </head>

   <form method="post">

    <input type="submit" value="GO" name="GO">
   </form>
 </body>
</html>

<?php
    if(isset($_POST['GO']))
    {
        shell_exec("python /var/www/html/lab/mkdir.py");
        echo"success";
    }
?>

mkdir.py

#!/usr/bin/env python    
import os    
os.makedirs("thisfolder");
62o28rlo

62o28rlo7#

请注意,如果您使用的是虚拟环境(如在共享主机中),那么您必须调整您的python路径,例如:第一个月

ecr0jaav

ecr0jaav8#

你可以😁使用[phpy -php库][1] php文件

<?php
  require_once "vendor/autoload.php";

  use app\core\App;

  $app = new App();
  $python = $app->python;
  $output = $python->set(your python path)->send(data..)->gen();
  var_dump($ouput);

python文件:

import include.library.phpy as phpy
print(phpy.get_data(number of data , first = 1 , two =2 ...))

你也可以在github页面[1]中看到例子:https://github.com/Raeen123/phpy

vyswwuz2

vyswwuz29#

如果你想在PHP中执行Python脚本,有必要在php脚本中执行以下命令:

exec('your script python.py')

相关问题