更新日志

继承指定文件夹里的模块 -- 2017-05-11

新增LOAD_TYPE,可以动态加载包,不需要每次都重启ppython服务 -- 2017-09-22

一、ppython 简述

本类库基于年久已不再维护的ppython改写,为了表达对它的敬意,我决定沿用原名称。

站在巨人的肩膀上

ppython是一个令人兴奋的项目,但是已经在14年停止维护和更新。以下部分文字摘自原ppython介绍,原文地址 http://www.oschina.net/p/ppython

许多人在纠结WEB快速开发究竟是采用PHP,还是采用Python,二者同样是脚本语言,但特点鲜明:

PHP: Web专用开发利器,有10多年的经验积累,但其他领域基本不涉及,扩展性不强,企业应用少。

Python: 近期的明星语言,面向对象、简单高效、可扩展性强,但Web开发积累少,成熟度低。

ppython开源项目既是结合使用PHP和Python两种语言,取其所长、补其所短,面向企业WEB领域的开发技术。此技术可以理解为PHP和Python相结合的技术,也可称为PHP和Python混合编程技术,或者PHP调用Python服务的技术,也有人习惯称之为前台PHP后台Python的技术框架。

本项目是LAJP项目的语言环境的拓展,变化是将LAJP中的Java语言变更为Python语言,因此LAJP的技术、文档对本项目有参考作用。

特点

优势互补: PHP和Python都是流行的脚本语言,PHP非常适合网页编程;而Python可以当作轻量级JAVA,二者结合可发挥各自优势。

高效稳定: Apache+PHP组合可带来优异的WEB服务稳定性,而Python的语言能力可补充如连接池、事物管理、分布式、对象模型等高端特性。

通信机制: PHP和Python间的通讯方式采用TCP Socket和Unix Socket两种机制,兼顾通讯效率和分布式。

数据类型自动转换机制: PHP数据和Python数据可准确地自动匹配和转换,无须程序员编写解析代码。

易用: 安装配置简单,PHP端和Python端编程符合各自的编程习惯。

轻量级: 架构非常轻量级,除了最基本的PHP和Python环境,不需要任何扩充的、第三方的组件、容器。

PHP和Python的互通:

提高Python的多线程效率

Python因其语言GIL特性,多线程效率不高。在PHP+Python的混搭机制中,Python端可以多进程方式部署,从而提高Python的整体工作效率。

新ppython可以做什么?有什么优势?

相对于已经年久失修且各种报错的旧版ppython,我做了相应的优化和修正,您可以很容易的集成在任意PHP项目中!

新的ppython主要改进了以下内容:

将原生代码封装成可供调用的类库,开发者不需要关注深入的代码逻辑即可方便的使用;

改正了原项目中很多错误,精简了代码,去除无用代码;

将方法调用逻辑优化,从只传入文件名改为默认需传入文件夹/文件名,这样使开发者可以更好的管理Python文件;

注意事项

确保PHP已经打开socket相关模块

确保你的服务器上有Python3及以上版本

二、使用方法(以ThinkPHP5为例)

类库端的操作

克隆代码放到example的extend目录下。

在python目录下新建文件目录和文件,例:test/test.py。

python文件的基本写法和以前没有区别,其实就是将对外部访问的部分封装成方法,最终要将结果返回一个字符串或数组。

在test.py中写入你要调用的方法,例:

# 无参数

def hello():

return 'Hi , Tommy'

# 传递参数

def hello_name(name):

return 'Hi , ' + name

# 返回数组

def return_arr():

user = {}

user['name'] = 'Tommy'

user['age'] = 24

return user

# 由于PHP传过来的参数都会被处理成字符串类型,所以需要使用数字类型的地方请自行转换,如若是其他类型数据做类似处理,否则会报错。

# 但是由Python传给PHP的结果的数据类型不受限制

def dosum(num1 , num2):

return int(num1) + int(num2)

使用终端用python3运行类库下的php_python.py文件

python3 php_python.py

看到以下输出,证明启动成功

-------------------------------------------

- PPython Service

- Time: 2017-08-04 13:24:13

-------------------------------------------

Listen port: 21230

charset: utf-8

Server startup...

在控制器中如何使用

头部要引用该类库

use ppython\Ppython;

示例代码

<?php

namespace app\index\controller;

use ppython\Ppython;

class Index

{

// 不带参数

public function py()

{

$python = new Ppython();

$data = $python->py("sayhi.hi::hello");

dump($data);

}

//带参数的方法

public function py_with_something($name)

{

$python = new Ppython();

// 更多参数依次往后添加

$data = $python->py("sayhi.hi::hello_name",$name);

dump($data);

}

// python返回的是数组

public function py_arr()

{

$python = new Ppython();

$data = $python->py("sayhi.hi::return_arr");

dump($data);

}

// PHP传递数字类型变量,计算2+3的和

public function py_num()

{

$python = new Ppython();

$data = $python->py("sayhi.hi::dosum",2,3);

dump($data);

}

}

访问以查看效果

开启服务器,将根目录指向example的public下。

访问不带参数的方法

http://localhost/index/index/py

直接会得到结果

string(10) "Hi , Tommy"

访问带参数的方法,可以依次将参数跟在方法后面

http://localhost/index/index/py_with_something/name/Handsom_Tommy

经过Python处理后得到结果(多参数的情况按照说明使用即可)

string(18) "Hi , Handsom_Tommy"

Python返回给PHP的结果不受限制,我们来测试下返回一个数组

http://localhost/index/index/py_arr

得到相应数组

array(2) {

["name"] => string(5) "Tommy"

["age"] => int(24)

}

由于PHP传过来的参数都会被处理成字符串类型,所以需要使用数字类型的地方请自行转换,如若是其他类型数据做类似处理,否则会报错。

http://localhost/index/index/py_num

得到以下结果,Python返回给PHP的数据类型不受限制

int(5)

三、一些必要的操作和注意事项

必须使php_python.py一直运行着

使用本类库必须进行服务器端的相关操作,其实是起socket服务,以支持PHP和Python之间的通信。

从上面已经可以看到,必须要让php_python.py运行着,这个类库才能正常使用,因此我们需要在服务器端进行一些必要的操作。我只提供思路和自己的解决办法,如果您有更好的解决方法,请联系我。

解决方案原理: 当我们断开SSH连接时,依然保持该文件的运行状态。

利用screen或tmux这类工具运行php_python.py,这样我们断开SSH连接也没关系,它会在后台继续运行。这类工具具体使用方法请自行搜索。

如果在已有文件中添加新的代码,必须先ctrl + c来shutdown上述php_python.py文件,然后重新运行该文件。否则,新添加的代码不起效果。

但是,如果是新添加了目录或文件,不用进行重启操作。

GOOD NEWS!

现在支持LOAD_TYPE设置啦!你可以在process.py里指定LOAD_TYPE的值。

默认为0,即原有模式:如果在已有文件中添加新的代码,必须先ctrl + c来shutdown上述php_python.py文件,然后重新运行该文件。否则,新添加的代码不起效果。

1为reload模式,此时可以动态加载模块,修改代码不必再重启ppython服务

php python 混合_php-python相关推荐

  1. php与python缺点_php,python,ruby,perl的优缺点?

    提问者采纳 2012-02-25 08:41 perl基本已经被淘汰,在各方面几乎已经没有优势,虽然说还正在开发perl6啊什么的,不过基本上大势已去.虽然在部分场合还有应用,不过大部分都只是因为历史 ...

  2. android与python交互_Android与Python混合编程

    前言 早在2017年的时候,出于业余兴趣,我就开始研究关于Python移植到Android上的实现方案,我一直希望能实现Android与Python的混合编程,并为此写了一系列博客,我希望借助JNI技 ...

  3. python利器怎么编程-C++和Python混合编程的利器

    Python是一种简单易学.功能强大的编程语言,它有高效率的高层数据结构,能简单而有效地实现面向对象编程.Python简洁的语法.对动态输入的支持和解释性语言的本质,使得它在很多领域的大多数平台上都是 ...

  4. python和vb的代码可以通用吗-VB6+Python混合编程(COM组件)(转)

    VB6+Python混合编程(COM组件) 0.2572018.05.10 16:01:23字数 553阅读 3725 Python的方便不用说,VB6做GUI的简单程度更不用说.二者混合编程的需求一 ...

  5. qt如何用python结合_在Qt(C++)中与Python混合编程

    一.PythonQt库 在Qt(C++)中与Python混合编程,可以使用PythonQt库. 网站首页:http://pythonqt.sourceforge.net 下载页面:https://so ...

  6. python优点是代码库支持、灵活_C++和Python混合编程的利器

    Python是一种简单易学.功能强大的编程语言,它有高效率的高层数据结构,能简单而有效地实现面向对象编程.Python简洁的语法.对动态输入的支持和解释性语言的本质,使得它在很多领域的大多数平台上都是 ...

  7. python 构造函数传参_C++和python混合编程之在python类构造函数中传参方法

    C++和python混合编程 零.前言 一.说明 二.测试代码 1.C++代码 2.python代码 三.运行结果 零.前言 C++是一门高效率的语言,Python是一门简单易学的脚本语言,现在Pyt ...

  8. 《Python开发 - Python杂记》Python与C/C++混合编程

    Python是脚本语言,可以做的事情非常的多,本文将要讲解使用Python来调用C/C+库. 关于C/C++库的创建请看笔者以前的文章,这里只给出Window下的创建过程. 静态库和动态库(Windo ...

  9. FreeCAD C/C++/Python混合开发/调试方案

    FreeCAD C/C++/Python混合开发/调试方案 济南友泉软件有限公司 本文主要讲述在Visaul Studio 2019中混合调试FreeCAD C/C++/Python代码的环境配置方法 ...

最新文章

  1. (转)Spring读书笔记-----Spring的Bean之Bean的基本概念
  2. 查找两个已经排好序的数组的第k大的元素
  3. android模拟多任务键,模拟Android Handler机制——单线程处理多任务
  4. Python爬虫常用模块
  5. 数据挖掘中聚类算法概述
  6. resnet keras 结构_Day146:第二讲 ResNet
  7. SQL2008R2 收缩数据库问题 - 日志文件不变小
  8. Learning Scrapy笔记(五)- Scrapy登录网站
  9. 怎样更改itunes备份位置_iphone备份太大,严重挤占C盘空间,怎么把备份放在其他的硬盘?...
  10. LeetCode——N-Queens II
  11. TCP 和 UDP 有什么区别?
  12. 在无线网中,通过添加IP地址连接东芝打印机
  13. 导出excel 手动拼装复杂表头
  14. 华为员工吐槽加班太多,晒出7天上班打卡记录网友:不怕猝死吗?
  15. Python爬虫之堆糖网图片(二)
  16. getopts函数简介
  17. c中double型比较大小
  18. 网络工程师的就业前景如何?市场需求如何?
  19. Pandas 写入excel报错UserWarning: Ignoring URL
  20. Window cmd

热门文章

  1. Qt如何调用VS编写的动态链接库(dll文件)
  2. 在windows平台下搭建Django项目虚拟环境
  3. python接口测试之新手篇
  4. python+splinter实现12306网站刷票并自动购票流程
  5. JavaWEB过滤器和监听器技术
  6. [UE4]控制台命令,生成机器人
  7. hadoop(八) - hbase集群环境搭建
  8. 对于数据库视图的一些理解
  9. 01:与指定数字相同的数的个数【一维数组】
  10. python数字类型及运算_Python数据类型之数字(Numbers)和运算符