PHP 中调用 Python 并获取运行结果
Posted 知其黑、受其白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP 中调用 Python 并获取运行结果相关的知识,希望对你有一定的参考价值。
阅读目录
Python sys.argv
php 借助 shell_exec
通过类似于 python sum.py $aa $bb
的形式以执行系统命令的方式传递参数给Python文件;
Python 则通过 sys.argv(需引入sys模块)
来接收命令中所包含的参数(需要注意的是:此时传入的参数都会被默认为 str
类型,需要在函数内部进行解析和转换)并将处理结果通过print
函数输出;
PHP 通过将 shell_exec 函数返回的结果赋给变量实现取得 Python 返回数据的效果。
php index.php
<form action="" method="post">
请输入a:<input type="number" name="a" value="请输入a"><br> 请输入b:
<input type="number" name="b" value="请输入b">
<button type="submit">计算</button>
</form>
<?php
$aa = $_POST["a"];
$bb = $_POST["b"];
$cmd = shell_exec("python sum.py $aa $bb");
echo "a与b的和是: $cmd";
python sum.py
import sys
# 以下两行解决中文乱码问题
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
a, b = sys.argv[1], sys.argv[2] # 接收位置参数
print(int(a)+int(b))
字符串示例
<?php
$name = '订单5210804229002567电子发票.pdf';
$cmd = shell_exec("python sum.py $name");
echo $cmd;
import sys
# 以下两行解决中文乱码问题
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.detach())
a = sys.argv[1] # 接收位置参数
print(a)
PHP (shell_exec()、exec()、passthru()、system())的区别
PHP:除了使用 shell_exec(),还可以使用 exec()、passthru() 和 system() 函数调用系统命令,
它们四者的区别如下:
shell_exec()
通过 shell 环境执行命令,并且将完整的输出以字符串的方式返回。
也就是说, PHP先运行一个 shell 环境, 然后让 shell 进程运行你的命令, 并且把所有输出以字符串形式返回, 如果程序执行有错误或者程序没有任何输出, 则返回 null。
exec()
与 shell_exec() 不一样, exec 不会创建 shell 进程, 可以理解是 php 进程直接创建一个子进程, 运行指定的命令, 返回值只返回命令的最后一行, 所有的返回以参数形式返回。
passthru()
与 exec() 类似, 唯一不同的是, 命令的所有输出返回内容都不再导入到 PHP 环境, 而是直接作为输出内容, 返回到浏览器的输出上, 等效是把所有返回内容直接 echo 输出。
system()
这个方法和 passthru() 类似, 但是 system() 方法会在程序的每行输出的时候执行一次缓存输出动作, 可以理解为, 只要外部程序输出一行, php 就会马上把内容推送到浏览器, 无论这个内容是否足够大。
php通常为了输出效率, 都会有一个输出缓存, 会等到输出内容足够大之后, 再一次输出返回. system() 方法则强制输出内容立刻推送, 即使输出的内容只有一个字母. 如果客户端具有实时打印服务器的返回 http 内容流的能力, 就可以看到 system() 的实时推送效果。
以上是关于PHP 中调用 Python 并获取运行结果的主要内容,如果未能解决你的问题,请参考以下文章