我想从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已多次询问,每个答案都有不同的答案:
$output = array();
exec("python hi.py", $output);
var_dump( $output);
$command = escapeshellcmd('/usr/custom/test.py');
$output = shell_exec($command);
echo $output;
// 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)));
$mystring = system('python myscript.py myargs', $retval);
所有这些答案都被接受并拥有相当数量的赞成票。哪些(如果有的话)是从PHP调用Python脚本的正确方法?
答案 0 :(得分:2)
他们都做同样的事情,但有一些不同的输出。我建议使用最符合你情景的那个。
我经常使用shell_exec,因为我在调试时更容易,因为我需要做的就是在<pre>
标签中打印一个字符串。人们往往会忘记一件事,特别是当他们试图调试内容时。使用:脚本末尾的2>&1
和args。以上面的一个例子,它看起来像这样:
shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)) . " 2>&1");
这允许您查看错误输出,这很可能是您需要弄清楚它在命令行上运行的原因,但是当您从PHP运行它时它不起作用。