如何从PHP正确调用Python 3脚本?

时间:2016-01-22 22:52:25

标签: php python-3.x

我想从PHP调用Python 3脚本(带参数)并处理返回的信息。

//server.php
arg1 = $_POST['arg1'];
arg2 = $_POST['arg2'];
args = array(arg1,arg2);

//pseudo code - THIS IS WHERE MY QUESTION IS
//$results = call_python3_script_somehow

echo $results
#script.py
import MyProcess

#take in args somehow

args = [arg1,arg2]
result = MyProcess(args)

return result

问题是Stack Overflow已多次询问,每个答案都有不同的答案:

执行功能(herehere

$output = array();
exec("python hi.py", $output);
var_dump( $output);

转义shell函数(here

$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;

shell执行函数(here

// This is the data you want to pass to Python
$data = array('as', 'df', 'gh');

// Execute the python script with the JSON data
$result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)));

系统功能(here

$mystring = system('python myscript.py myargs', $retval);

所有这些答案都被接受并拥有相当数量的赞成票。哪些(如果有的话)是从PHP调用Python脚本的正确方法?

1 个答案:

答案 0 :(得分:2)

他们都做同样的事情,但有一些不同的输出。我建议使用最符合你情景的那个。

我经常使用shell_exec,因为我在调试时更容易,因为我需要做的就是在<pre>标签中打印一个字符串。人们往往会忘记一件事,特别是当他们试图调试内容时。使用:脚本末尾的2>&1和args。以上面的一个例子,它看起来像这样:

shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)) . " 2>&1");

这允许您查看错误输出,这很可能是您需要弄清楚它在命令行上运行的原因,但是当您从PHP运行它时它不起作用。