从PHP运行venv Python脚本

时间:2018-12-31 10:26:22

标签: php python

我正在从PHP运行许多python脚本。我的php脚本模板如下:

<?php
setlocale(LC_ALL, "en_US.utf8");
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");

$command = escapeshellcmd("/usr/bin/python2.7 /path/to/script");
$args = escapeshellarg($_GET["title"]). " " . 
escapeshellarg($_GET["user"]);
$output = shell_exec($command . " " . $args);
echo $output;

但是现在我需要运行虚拟环境中的一些python脚本。

我尝试将/usr/bin/python2.7替换为./www/python/venv/bin/python3,但无效。

那么如何在PHP中运行它?

2 个答案:

答案 0 :(得分:2)

要真正运行venv,您需要在shell中执行三个步骤:

  1. 更改为项目根目录。
  2. 来源venv/bin/activate
  3. 运行python path/to/script

前提条件您已经为项目准备了虚拟环境。

您可以将这三个步骤组合成一个bash脚本,然后从PHP调用该脚本。

答案 1 :(得分:1)

理想情况下,您应该使用APIs,这是最佳做法。但是,如果您没有API可用,则可以使用pipe
可以像以下功能一样使用:exec_command($command)其中,
$command = $command . " " . $args
下面是代码:

<?php
setlocale(LC_ALL, "en_US.utf8");
header("Content-Type: application/json");
header("Access-Control-Allow-Origin: *");

$command = escapeshellcmd("/usr/bin/python2.7 /path/to/script");
$args = escapeshellarg($_GET["title"]). " " . 
escapeshellarg($_GET["user"]);

$command = $command . " " . $args;

$output = "";
$hd = popen($command, "r");
while(!feof($hd))
{
  $output .= fread($hd, 4096);
}
pclose($hd);

echo $output;

?>