php联动python不完全攻略

写在前面

最近在做的一个php项目有需要用到python作为其中某一个功能的实现。尽管这个功能也不是不能用php实现,但是python上有现成的轮子,本着能用轮子就不自己造的原则,决定使用php调用python的形式实现。

虽然但是,目前这个解决方案并不是完美方案,个人评价仅为方便可用(doable),在文章中我会探讨一些我没有采用或实现的可能方法,欢迎指导。

环境

OS:Ubuntu 18.04.3 LTS
PHP: 7.2.6
python: 3.6.8 (+NLTK, json两个库)

环境配置方面其实有一个小坑,python如果有需要用到比较多的包(如tensorflow、beautifulsoup之类)就会涉及到如何配置服务器环境的问题。提供一些可行的思路:使用anaconda的环境配置文件通过这个文件在服务器上重新下载对应的包;使用pyinstaller将python打包成可执行程序(win上打包成exe,linux也有对应的运行程序,但由于win只能打包exe,若要打包成linux的需要用linux开发,因此我没有使用这种方法,理论上这种方法是最舒服的);使用docker等。

php调用python基础

php要调用python有几种大的方向:一是python作为独立的脚本被php运行并获取输出结果(PHP执行系统外部命令函数);二是php和python通过某种方式通信,实现真正意义上的交互(Python作为PHP的扩展——ppython简介)。
这里第二种方法涉及到的知识点比较复杂,涉及到了socket等,有关的介绍也比较少,因此没有使用。

第一种方法主要是通过执行系统命令的方式。主要函数有exec()、passthru()、system()、shell_exec()四个。详细的使用可以看上面的第一篇文章,我用的是exec()

首先来看函数声明,主要就是要把命令传过去,然后用一个数组接收返回结果和返回值。这里一共就有三个坑,第一是传值的问题,第二是返回结果的问题,第三就是debug的问题,之后会详细讲。

function exec(string $command,array[optional] $output,int[optional] $return_value)

有了这个之后就可以进行尝试了。
ps: 如果在尝试的时候遇到问题,可以先看文章最后面的debug,能够拿到报错信息对debug真的至关重要。

Babysteps

python这边比较简单,用sys.argv提取命令行参数,然后用print输出即可。

import sys
params = sys.argv[1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值