导航:首页 > 编程语言 > python调用php接口

python调用php接口

发布时间:2023-01-22 14:44:48

1. php的curl模块和python的pycurl模块的区别

php的curl,是在php发布程序的ext文件中,作为一个php自带的支持,需要改写php的配置文件,修改php.ini,将;extension=php_curl.dll前的分号去掉。

python的pycurl,不是python自带的支持程序,python在做爬虫一般都是用urllib,urllib2,twisted等,比较少的使用pycurl.安装略.

c的curl,是前面2个语言的curl父程序,是c的curl才有了php的curl和python的pycurl,同时,python的pycurl
文档说明了只实现了部分功能,即是一个c的curl的阉割版。泪奔,原来用了那么长时间的东西,连冰山一角都没触碰,或者python的pycurl也只
是会用其中的一个或少数几个功能。

2. python 有没有php里面的soapclient这样的东西

SOAP.py 客户机和服务器
SOAP.py 包含的是一些基本的东西。没有 Web 服务描述语言(Web Services Description Language,WSDL)或者任何其它附加的东西,只有用 Python 实现的 SOAP 客户机和服务器的透明支持。甚至这个包中的一个很好的功能也只是与基础架构相关:SOAP.py 支持安全套接字层(SSL)用于加密的 SOAP 传输。为使用这个功能,您必须安装 M2Crypto,M2Crypto 是一个库,包含各种加密工具和格式,从 RSA 和 DSA 到 HTTPs、S/MIME 等等。在这一部分,我们不准备讨论 SOAP.py 的 SSL 支持。
SOAP 操作摘要
目前为止,SOAP 实用程序好象仍是比较流行的使用 Python 的开放源代码活动。下面是该项目的纲要以及它们目前的状态。首先,参与者:
4Suite SOAP,由 Fourthought 管理
SOAPy,由 Adam Elman 管理
SOAP.py,Python 项目的一个 Web 服务项目
soaplib,由 Secret Labs 管理
Orchard,由 Ken MacLeod 管理
PySOAP,由 Dave Warner 管理
4Suite SOAP 是我们自己的实现,我们在本专栏的前面三部分中使用过(请参阅 参考资料以获得它的链接)。它目前仍在开发中。
SOAPy 是在 2001 年 4 月公布的,目前处于 alpha 的预备阶段,但现在好象停止开发了。
SOAP.py 开发被冻结了。SOAP.py 这个项目是由 actzero 公司赞助的,而 actzero 却不再从事这一行业了。正在邀请自愿开发/维护 SOAP.py 的组织。
soaplib 的开发好象也延缓了,考虑到 Secret Labs 这段时间所承担的大量工作,或许就可以理解为什么会这样了。这个瑞典的公司是由 Fredrik Lundh 掌管的,他在 Python 圈内是出名的“工作狂”,同时也是 Python Association 董事会的一名成员。Secret Labs 还开发 PythonWare(Python 的一个核心和重要的附加模块);PythonWorks(一个领先的 Python IDE);Python Imaging Library 和许多其它好东西(日常 Python-URL Web 日志就是其中的一部分)。
Orchard 是一个数据管理框架,基本上是一种用一个公共接口管理不同数据格式的方法。它实现了一个 SOAP 客户机作为在远程过程调用中向 SOAP 服务器发送 Orchard 数据项的基本方法(被称为节点)。
PySOAP 这个项目主要是想作为 Dave Warner 的 Church 管理套件的一部分,但它还从没发行过任何文件,好象是一个毫无生气的项目。
安装
开始先下载分发包(在写这篇文章的时候,SOAPpy 0.9.7 是最新的分发包),把文件解包,转到结果目录,并把文件 SOAP.py复制到自己倾向的位置。当然,这个“倾向”就是需要技巧的地方。由于这些 SOAP lib 中有很多都使用大小写组合不同的“soap.py”作为模块名,所以大家一定要小心。当然,UNIX 用户只需关心大小写是否精确匹配,但对于 Windows 用户来说,甚至“SOAP.py”和“soap.py”之间的冲突也会带来麻烦。Orchard 的 SOAP.py 也有一个容易发生冲突的名称,但它有可能避开所有的问题,因为它的模块聪明地放在了 Orchard 包中。
上面的内容简言之就是建议您确保安装所有的 Python SOAP 模块时都使用与众不同的包名称。在我们的案例中,我们在 PYTHONPATH 中发现了一个合适的目录并创建了一个 WebServices 包,把 SOAP.py 放在了这个包中。因此,在 Linux 中:
$ mkdir ~/lib/python/WebServices
$ touch ~/lib/python/WebServices/__init__.py
$ cp SOAPpy097/SOAP.py ~/lib/python/WebServices

请注意很重要的第二条命令,它将生成一个 __init__.py 文件,这个文件将 WebServices 目录标志为 Python 包。如果您需要把这些代码打包成 Windows 版本,您可能希望向空文件中输入一些注释,因为一些 Windows 工具不创建空文件。
您已深入主题了
对于公开提供的 SOAP 服务器,早已经有了好几个活动的注册中心。最流行的可能是 XMethods。当然,它也是一个相当有趣的指导,通过它我们可以了解 SOAP 的实际状况,而不要听它的吹嘘。这里的大多数公共 Web 服务仍然只是一些无关紧要的东西,几乎不值得我们勇敢的新模型多费口舌,但那是另一回事了。实际上,我们将选择一个公共服务来演示和测试如何把 SOAP.py 作为 SOAP 客户机使用。
或者,我们可以试试。作者尝试的第一个服务,卫生保健提供者定位器,在遇到下列报错消息时显示 SOAP 互操作性的当前状态中的陷阱:
WebServices.SOAP.faultType: <Fault soap:Client:
Server did not recognize the value of
HTTP Header SOAPAction: "".>

哦。SOAPAction 是一个 HTTP 头,应该是用来标记被访问服务的。它是 SOAP 请求中必需的头,但即便是设置了所需的头(只是一对空的双引号)后,上面的错误仍然存在。作者发现大多数 MS SOAP 实现都存在这个问题。在试遍了这些服务后,我们断定,Delphi 实现好象与 SOAP.py 合作得最好,但在试服务时 — 即使是用 Delphi 实现时,也返回复杂的类型,比如列表,SOAP.py 无法使用它们,返回不带数据的 WebServices.SOAP.typedArrayType 实例。
最后,作者选择了一个相当合适的 Web 服务,该服务返回漫画《丁丁历险记》中的人物 Haddock 船长常用的骂人语言(是的,大多数 Web 服务都是这样)。 清单 1(curse.py)就是这个程序。
清单 1:访问 Curse 生成器 SOAP 服务的 SOAP.py 程序
#!/usr/bin/env python

import sys
#Import the SOAP.py machinery
from WebServices import SOAP
remote = SOAP.SOAPProxy(
"ck.exe/soap/IHaddock",
namespace="urn:HaddockIntf-IHaddock",
soapaction="urn:HaddockIntf-IHaddock#Curse"
)
try:
lang = sys.argv[1]
except IndexError:
lang = "us"
result = remote.Curse(LangCode=lang)
print "What captain Haddock had to say: "%s""%result

把一切综合在一起
导入库后,我们将设置代理对象 remote 。这个对象将方法调用转换为远程 SOAP 消息。它的初始化器使用管理远程请求的关键参数: 服务器的 URI(被称为“端点”)、请求元素的 XML 名称空间(通过它,SOAP-as-RPC 将 口头承诺变成 XML 基础)和 SOAPAction 头值。
接下来,我们将确定方法参数,对于这个 Web 服务来说,方法参数只是 Haddock 骂人的语言,瑞典语(“se”)或英语(奇怪的是,是“us”而不是“en”)。
最后,我们调用名称正确的方法,代理对象的 Curse 进行 SOAP 调用,然后打印出结果。下面的会话演示了对该程序的使用:
$ python curse.py
What captain Haddock had to say: "Ectoplasmic Byproct!"

我们自己的 SOAP 服务器
用 SOAP.py 实现 SOAP 服务器相当容易。作为一个示例,我们将仿建字段,还要实现一个很常见的服务:一个程序,给出年份和月份,它将以字符串的形式打印出日历。它的程序服务器是 清单 2(calendar-ws.py)。
清单 2:实现日历服务器的 SOAP.py 程序
#!/usr/bin/env python
import sys, calendar
#Import the SOAP.py machinery
from WebServices import SOAP
CAL_NS = "/simple-cal"
class Calendar:
def getMonth(self, year, month):
return calendar.month(year, month)
def getYear(self, year):
return calendar.calendar(year)
server = SOAP.SOAPServer(("localhost", 8888))
cal = Calendar()
server.registerObject(cal, CAL_NS)
print "Starting server..."
server.serve_forever()

进行过必要的导入后,我们为自己的服务器定义 SOAP 请求元素期望的名称空间( CAL_NS )。接下来我们定义实现所有方法的类,这些方法将被公开为 SOAP 方法。大家也可以把单个函数作为 SOAP 方法注册,但使用类方法是最灵活的,特别是当您想管理调用间的状态时。这个 Calendar 类定义了一个方法 getMonth ,该方法使用 Python 的内置日历模块在文本表单中返回月度日历,同时它还定义了另一个返回整年日历的方法。
然后创建 SOAP 服务器框架的一个实例,这个实例还带有侦听端口 8888 的指令。我们还必须创建 Calendar 类的一个实例,这个实例在下一行中被注册用来处理 SOAP 消息,同时为其指出相关的名称空间。最后,我们调用 serve_forever 方法,该方法直到进程终止才返回。
为运行服务器,请打开另一个命令 shell 并执行 python calendar-ws.py 。执行结束时使用 ctrl-C 杀死进程。
我们本来可以用也是用 SOAP.py 写的客户机测试服务器,但那太显而易见了。我们还是用低级 Python 编写客户机把 SOAP 响应作为 XML 字符串来构建,并发送一条 HTTP 消息。这个程序(testcal.py)在 清单 3中。
清单 3:用 Python 核心库写的访问日历服务的客户机
import sys, httplib
SERVER_ADDR = "127.0.0.1"
SERVER_PORT = 8888
CAL_NS = "ple-cal"
BODY_TEMPLATE = """<SOAP-ENV:Envelope
xmlns:SOAP-ENV="oap/envelope/"
xmlns:s="/ws/simple-cal"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/1999/XMLSchema"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
>
<SOAP-ENV:Body>
<s:getMonth>
<year xsi:type="xsd:integer">%s</year>
<month xsi:type="xsd:integer">%s</month>
</s:getMonth>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>"""
def GetMonth():
year = 2001
month = 12
body = BODY_TEMPLATE%(year, month)
blen = len(body)
requestor = httplib.HTTP(SERVER_ADDR, SERVER_PORT)
requestor.putrequest("POST", "cal-server")
requestor.putheader("Host", SERVER_ADDR)
requestor.putheader("Content-Type", "text/plain; charset="utf-8"")
requestor.putheader("Content reply_body = requestor.getfi-Length", str(blen))
requestor.putheader("SOAPAction", "het/eg/ws/simple-car")
requestor.endheaders()
requestor.send(body)
(status_code, message, reply_headers) = requestor.getreply()
le().read()
print "status code:", status_code
print "status message:", message
print "HTTP reply body:\n", reply_body
if __name__ == "__main__":
GetMonth()

下面的会话演示了这个测试的运行情况。
$ python testcal.py
status code: 200
status message: OK
HTTP reply body:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<getMonthResponse SOAP-ENC:root="1">
<Result xsi:type="xsd:string"> December 2001
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
</Result>
</getMonthResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

仔细审查的字节
如果您查找行 self.debug = 0 并把“0”改为“1”(这是 SOAP.py 版本 0.9.7 中的第 210 行),有一件要注意的事情是您可以获得被交换的实际 SOAP 消息的详细信息和用于调试与跟踪的其它关键数据,这对您很有用。作为示例,下面提供了一个会话,它是打开了调试信息显示开关的以前的 curses.py 程序的一个会话:
$ python curse.py
*** Outgoing HTTP headers **********************************************
POST /scripts/Haddock.exe/soap/IHaddock HTTP/1.0
Host: www.tankebolaget.se
User-agent: SOAP.py 0.9.7 (actzero.com)
Content-type: text/xml; charset="UTF-8"
Content-length: 523
SOAPAction: "urn:HaddockIntf-IHaddock#Curse"
************************************************************************
*** Outgoing SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/1999/XMLSchema" xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance"
xmlns:SO
AP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body>
<ns1:Curse xmlns:ns1="urn:HaddockIntf-IHaddock" SOAP-ENC:root="1">
<LangCode xsi:type="xsd:string">us</LangCode>
</ns1:Curse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
************************************************************************
*** Incoming HTTP headers **********************************************
HTTP/1.? 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 11 Sep 2001 16:40:19 GMT
Content-Type: text/xml
Content-Length: 528
Content:
************************************************************************
*** Incoming SOAP ******************************************************
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-
ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"
xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xml
soap.org/soap/encoding/"><SOAP-ENV:Body><NS1:CurseResponse xmlns:NS1="urn:HaddockIntf-
IHaddock" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><NS1:return
xsi:type="xsd:string">Anacoluthons!</NS1:return></NS1:CurseRespon
se></SOAP-ENV:Body></SOAP-ENV:Envelope>
************************************************************************
What captain Haddock had to say: "Anacoluthons!"

为进行比较,您可以在带有下列代码的旧的 Python 脚本或程序中获得相同的信息:
import calendar
return calendar.month(2001, 10)

SOAP.py 总结
我们已经注意到了,虽然 SOAP.py 的互操作性还存在一些问题,但可用的调试工具可望提供帮助。

3. 详解Python中import方法引入模块

在python用import或者from...import或者from...import...as...来导入相应的模块,作用和使用方法与C语言的include头文件类似。其实就是引入某些成熟的函数库和成熟的方法,避免重复造轮子,提高开发速度。
python的import方法可以引入系统的模块,也可以引入我们自己写好的共用模块,这点和php非常相似,但是它们的具体细节还不是很一样。因为php是在引入的时候指明引入文件的具体路径,而python中不能够写文件路径进行引入。
下面总结一下import的几种情况:
python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向模块文件的路径。
下面将具体介绍几种常用情况:
(1)主程序与模块程序在同一目录下:
如下面程序结构:
`-- src
|-- mod1.py
`-- test1.py
若在程序test1.py中导入模块mod1, 则直接使用import mod1或from mod1 import *;
(2)主程序所在目录是模块所在目录的父(或祖辈)目录
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
`-- test1.py
若在程序test1.py中导入模块mod2, 需要在mod2文件夹中建立空文件__init__.py文件(也可以在该文件中自定义输出模块接口); 然后使用 from mod2.mod2 import * 或import mod2.mod2.
(3)主程序导入上层目录中模块或其他目录(平级)下的模块
如下面程序结构:
`-- src
|-- mod1.py
|-- mod2
| `-- mod2.py
|-- sub
| `-- test2.py
`-- test1.py
若在程序test2.py中导入模块mod1和mod2。首先需要在mod2下建立__init__.py文件(同(2)),src下不必建立该文件。然后调用方式如下:
下面程序执行方式均在程序文件所在目录下执行,如test2.py是在cd sub;之后执行python test2.py
而test1.py是在cd src;之后执行python test1.py; 不保证在src目录下执行python sub/test2.py成功。
import sys
sys.path.append("..")
import mod1
import mod2.mod2

4. php调用python,无法使用numpy等模块

一般服务器不可能给php执行shell脚步权限的,危险性太大。

再比如,如果以后Python与PHP不在一台服务器上怎么办?
所以,可以考虑通过api接口传递参数。

5. 如何在PHP服务器里运行python脚本

python环境在小鸟云云服务器装好后,就有一个idle工具,你找一下安装目录,自带的编辑器,在任意目录新建一个
aa.py
文件,用记事本和idle工具都行,输入print("hello
world"),如果你使用的是idle,直接按f5,就能查看结果,如果用记事本,打开cmd,进入这个目录,输入命令python
aa.py就出来结果了。

6. 有没有办法将PHP作为类似Python或Ruby一样的独立脚本来使用

可以,PHP运行方式有很多种,利用Apache,Nginx,IIS等web容器,只是其中一种使用的方式。

直接当做脚本的话,可以通过CLI的方式直接执行

7. php调用python

py和php放在同一个目录下面


some.py
------------------------------------------
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys

def do_some(a):
return "dosome:%s" % a

if __name__ == '__main__':
a = sys.argv[1]
if a:
T = do_some(a)
print T

-------------------------------------------
t.php

<?php
$k = $_REQUEST['k'];
if (!empty($k))
{
$k = trim($k);
// $a = array();
// exec('python ./some.py '.$k, $a);
// echo $a[0];
passthru('python ./some.py '.$k);
}

然后浏览器里面输入

浏览器会返回dosome:test

被我注释掉的代码也可以用来替代passthru
里面的$a 用来捕获输出 不过束腰注意的是 这里的arry 他是按照每一行' '当作一个元素
但是passthru 则是你python里的print的原样输出

8. python怎么获取需要登陆的接口的数据

使用Python做爬虫是很广泛的应用场景,那就涉及到了Python是如何获取接口数据的呢?Python拥有很多很强大的类库,使用urllib即可轻松获取接口返回的数据。
...展开
工具原料Python开发工具url接口,用于请求获取数据
方法/步骤分步阅读
1
/4
首先新建一个py文件,导入所需的类库,urllib,json等。
2
/4
声明api的url地址,和构造请求头。
3
/4
使用urlopen方法发起请求并获取返回的数据。
4
/4
最后就是对返回字符串的处理了。比如字符串的截取,字符串的转换成json对象,转换成字段,再获取对应key的值。
使用Python3实现HTTP get方法。使用聚合数据的应用编程接口,你可以调用小发猫AI写作API。这是一个免费的应用程序接口,先上代码,详细说明写在后面:

1
2
3
4
5
6
7
8
9
10
11
12
import requests
import time
import re
se = requests.session()

if __name__ == '__main__':
Post_url = "http://api-ok.xiaofamao.com/api.php?json=0&v=1&key=xxxxxx" #自己想办法弄到key
Post_data = {
'wenzhang': '床前明月光,疑是地上霜。'
}
Text = se.post(Post_url, data=Post_data).text.replace("'", '"').replace('/ ', '/')
print(Text)

首先,什么是原料药?应用编程接口的全称也称为应用编程接口。它简称为应用编程接口。当我第一次接触接口调用时,我不知道写什么,因为我看了整个项目。这个项目是由龙卷风写的。看了半天龙卷风后,我发现我走错了方向。我只是直接看着界面,因为没有人告诉我项目的整个过程。我不得不强迫自己去看它。我所要做的就是找到程序的主入口,然后根据函数一步一步地调用它。
当我编写接口时,因为我必须配合后台编写和浏览器访问,每次访问只需要传入相应的参数来调用相应的接口。界面可以由他人编写,也可以由合作公司提供。当然,合作公司提供的不是免费的。现在基本上,如果我不访问它一次,它只收费几美分。当你听到这些,不要低估这几分。有时候如果你打了几百万次电话,会花很多钱。有些人认为,我们不能按月付款吗?对不起,我不知道。总之,我们一个接一个地计算,因为第一次,我认为我买的那些直接买了我们想要的所有数据,把它们保存在本地数据库中,当我使用它们时,直接从我自己的数据库中转移它们。后来,我发现我想得太多了,伪原创API。
该接口调用由python的请求库访问,它基本上是一个get或post请求。有些接口是加密的,然后我们必须用另一方提供给我们的公钥加密或解密,然后用相应的参数访问。我们想要的数据基本上是在请求后返回的结果中以json格式解析的。因此,在请求之后,我们可以用请求提供的json函数来解析它,然后提取数据以一次访问一个数据。
没错,接口调用就是这么简单,但是有了后台编写,我才发现请求库现在有多强大,只要它是http或https,我很高兴我在一周内读完了请求和bs4,我真的不打电话给爬虫工程师,如果我是爬虫的时候不学习请求,你能用scrapy写4=dead来写它吗?Urllib的单词基本上被删除了。如果你有要求,为什么要用这个?

9. PHP的curl模块和python的pycurl模块的区别

这两个没啥区别,都是php或者python对curl
c库的接口封装,底层调用的东西是一样的,唯一说是不一样的,估计也就是封装出来的接口参数可能不一样。
如果解决了您的问题请采纳!
如果未解决请继续追问

10. PHP开发人员的Python基础知识

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域。那么PHP开发人员的Python基础知识都有哪些呢?以下仅供参考!

常用缩略语

Ajax:异步 JavaScript + XML

XML:可扩展标记语言(Extensible Markup Language)

什么是 Python?

Python 的定义是一种 “通用的高级编程语言”。它以简洁性和易用性着称,而且是少有的几种对空格和缩进有要求的语言之一。Python 的主要作者 Guido Van Rossum 在社区中仍然非常活跃,并且被人们戏称为仁慈的领导。

Python 的灵活性和紧凑性是值得称赞的。它支持面向对象编程、结构化编程、面向方面编程以及函数编程等。Python 采用小内核设计,但具备大量扩展库,从而确保了该语言的紧凑性和灵活性。

从语法的角度来说,您会发现 Python 的简洁性异常突出——几乎可以说是一种纯粹的境界。PHP 开发人员要么会对这种方法的语法深深陶醉,要么会发现它的局限性。这主要取决于您自己的见解。Python 社区推动这种美感的态度是非常明确的,它们更加重视的是美学和简洁性,而不是灵动的技巧。已形成 Perl 传统(“可以通过多种方式实现它”)的 PHP 开发人员(像我自己)将面对一种完全相反的哲学(“应该只有一种方法可以实现它”)。

事实上,该社区定义了一种特有的代码风格术语,即 Python 化(pythonic)。您可以说您的代码是 Python 化,这是对 Python 术语的良好运用,同时还可展现语言的自然特性。本文并不打算成为 Pythonista(或 Pythoneer),但如果您想继续 Python 之路,那么千万不能错过本文的知识点。就像 PHP 有自己的编程风格,Perl 有自己的概念方法,学习 Python 语言必然也需要开始用该语言来思考问题。

另一个要点:在撰写本文时,Python 的最新版本是 V3.0,但本文主要侧重于 Python V2.6。Python V3.0 并不能向后兼容之前的版本,而且 V2.6 是使用最为广泛的版本。当然,您可以根据需求使用自己喜好的版本。

Python 与 PHP 有何不同?

一般来说,PHP 是一种 Web 开发语言。是的,它提供了一个命令行接口,并且甚至可用于开发嵌入式应用程序,但它主要还是用于 Web 开发。相反,Python 是一种脚本语言,并且也可用于 Web 开发。从这方面来说,我知道我会这样说——它比 PHP 更加接近 Perl。(当然,在其他方面,它们之间并无实际不同。我们继续往下看。)

PHP 的语法中充斥着美元符号($)和大括号({}),而 Python 相对来说则更加简洁和干净。PHP 支持 switch 和 do...while 结构,而 Python 则不尽然。PHP 使用三元操作符(foo?bar:baz)和冗长的函数名列表,而命名约定更是无所不有;相反,您会发现 Python 要简洁多了。PHP 的数组类型可同时支持简单列表和字典或散列,但 Python 却将这两者分开。

Python 同时使用可变性和不变性的概念:举例来说,tuple 就是一个不可变的列表。您可以创建 tuple,但在创建之后不能修改它。这一概念可能要花些时间来熟悉,但对于避免错误极为有效。当然,更改 tuple 的惟一方法是复制它。因此,如果您发现对不可变对象执行了大量更改,则应该重新考量自己的方法。

之前提到,Python 中的缩进是有含义的:您在刚开始学习该语言时会对此非常难以适应。您还可以创建使用关键字作为参数的函数和方法——这与 PHP 中的标准位置参数迥然不同。面向对象的追随者会对 Python 中真正的面向对象思想感到欣喜,当然还包括它的 “一级” 类和函数。如果您使用非英语语言,则会钟爱于 Python 强大的.国际化和 Unicode 支持。您还会喜欢 Python 的多线程功能;这也是最开始令我为之着迷的特性之一。

综上所述,PHP 和 Python 在许多方面都彼此类似。您可以方便地创建变量、循环,使用条件和创建函数。您甚至可以轻松地创建可重用的模块。两种语言的用户社区都充满活力和激情。PHP 的用户群体更加庞大,但这主要归因于它在托管服务器及 Web 专注性方面的优势和普及性。

很好 简要介绍到此为止。我们开始探索之旅。

使用 Python

清单 1 展示了一个基本的 Python 脚本。

清单 1. 一个简单的 Python 脚本

for i in range(20):

print(i)

清单 2 展示了脚本的必然结果。

清单 2. 清单 1 的结果

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

在深入探索之前,我们先来了解一些预备知识。首先从变量开始。

变量

可以看到,表示变量并不需要任何特殊的字符。变量 i 就是一个纯粹的 i——毫无特殊之处。表示代码块或语言结束也不需要任何特殊字符(比如分号和括号);只需要在 for 行使用一个简单的冒号即可(:)。还需注意,缩进会向 Python 指示哪些内容属于 for 循环。举例来说,清单 3 中的代码会在循环中为各编号输出一个说明。

清单 3. 为各循环添加一条语句

for i in range(20):

print(i)

print('all done?')

相反,清单 4 中的代码会在循环结束处输出一条说明。

清单 4. 在循环后添加一条语句

for i in range(20):

print(i)

print('all done!')

现在,我第一次看到这样的代码时,我认为这完全是无稽之谈。什么?让我相信换行和缩进能保证代码的结构和运行?请相信我,不用多久,您就会习惯它(但我需要承认必须到达到分号处才会结束语句的运行)。如果您与其他开发人员共同开发 Python 项目,则会发现这种可读性的用处是多么大了。您不再像以前那样总是猜测 “这个聪明的家伙在这里究竟想干些什么?”

在 PHP,您使用 = 操作符为变量分配值(参见 清单 5)。在 Python 中,您使用相同的操作符,只是需要标记或指向值。对于我来说,它就是赋值操作而已,我不需要过多担心专门的术语。

清单 5. 创建变量

yorkie = 'Marlowe' #meet our Yorkie Marlowe!

mutt = 'Kafka' #meet our mutt Kafka

print(mutt) #prints Kafka

Python 的变量名称约定与 PHP 类似:您在创建变量名时只能使用字母、数字和下划线(_)。同样,变量名的第一个字符不能是数字。Python 变量名是区分大小写的,并且您不能使用特定的 Python 关键字(比如 if、else、while、def、or、and、not、in 和 is 开始符)作为变量名。这没有什么值得奇怪的。

Python 允许您随意执行基于字符串的操作。清单 6 中的大多数操作应该都是您熟悉的。

清单 6. 常见的基于字符串的操作

yorkie = 'Marlowe'

mutt = 'Kafka'

ylen = len(yorkie) #length of variable yorkie

print(ylen) #prints 7

print(len(yorkie)) #does the same thing

len(yorkie) #also does the same thing, print is implicit

print(yorkie.lower()) #lower cases the string

print(yorkie.strip('aeiou')) #removes vowels from end of string

print(mutt.split('f')) #splits "Kafka" into ['Ka', 'ka']

print(mutt.count('a')) #prints 2, the number of a's in string

yorkie.replace('a','4') #replace a's with 4's

条件语句

您已经了解了如何使用 for 循环;现在,我们来讨论条件语句。您会发现 Phyon 中的条件语句与 PHP 基本相同:您可以使用熟悉的 if/else型结构,如清单 7 所示。

清单 7. 一个简单的条件测试

yorkie = 'Marlowe'

mutt = 'Kafka'

if len(yorkie) > len(mutt):

print('The yorkie wins!')

else:

print('The mutt wins!')

您还可以使用 if/elif/else(elif,等价于 PHP 中的 elseif)创建更加复杂的条件测试,如清单 8 所示。

清单 8. 一个比较复杂的条件测试

yorkie = 'Marlowe'

mutt = 'Kafka'

if len(yorkie) + len(mutt) > 15:

print('The yorkie and the mutt win!')

elif len(yorkie) + len(mutt) > 10:

print('Too close to tell!')

else:

print('Nobody wins!')

您可能会说,目前为止并没有什么与众不同的地方:甚本上和想象中没有太大区别。现在,我们来看 Python 处理列表的方式,您会发现两种语言之间的不同之处。

列表

一种常用的列表类型是 tuple,它是不可变的。在 tuple 中载入一系列值之后,您不会更改它。Tuple 可以包含数字、字符串、变量,甚至其他 tuples。Tuples 从 0 开始建立索引,这很正常;您可以使用 -1 索引访问最后一个项目。您还可以对 tuple 运行一些函数(请参见清单 9)。

清单 9. Tuples

items = (1, mutt, 'Honda', (1,2,3))

print items[1] #prints Kafka

print items[-1] #prints (1,2,3)

items2 = items[0:2] #items2 now contains (1, 'Kafka') thanks to slice operation

'Honda' in items #returns TRUE

len(items) #returns 4

items.index('Kafka') #returns 1, because second item matches this index location

列表与 tuple 类似,只不过它们是可变的。创建列表之后,您可以添加、删除和更新列表中的值。列表使用方括号,而不是圆括号(()),如清单 10 所示。

清单 10. 列表

groceries = ['ham','spam','eggs']

len(groceries) #returns 3

print groceries[1] #prints spam

for x in groceries:

print x.upper() #prints HAM SPAM EGGS

groceries[2] = 'bacon'

groceries #list is now ['ham','spam','bacon']

groceries.append('eggs')

groceries #list is now ['ham', 'spam', 'bacon', 'eggs']

groceries.sort()

groceries #list is now ['bacon', 'eggs', 'ham', 'spam']

字典类似于关联数组或散列;它使用键值对来存储和限制信息。但它不使用方括号和圆括号,而是使用尖括号。与列表类似,字典是可变的,这意味着您可以添加、删除和更新其中的值(请参见清单 11)。

清单 11. 字典

colorvalues = {'red' : 1, 'blue' : 2, 'green' : 3, 'yellow' : 4, 'orange' : 5}

colorvalues #prints {'blue': 2, 'orange': 5, 'green': 3, 'yellow': 4, 'red': 1}

colorvalues['blue'] #prints 2

colorvalues.keys() #retrieves all keys as a list:

#['blue', 'orange', 'green', 'yellow', 'red']

colorvalues.pop('blue') #prints 2 and removes the blue key/value pair

colorvalues #after pop, we have:

#{'orange': 5, 'green': 3, 'yellow': 4, 'red': 1}

在 Python 中创建一个简单的脚本

现在,您已经对 Python 有了一定的了解。接下来,我们将创建一个简单的 Python 脚本。该脚本将读取位于您的服务器 /tmp 目录下的 PHP 会话文件的数量,并在日志文件中写入摘要报告。在该脚本中,您将学习如何导入特定函数的模块,如何使用文件,以及如何写入日志文件。您还将设置一系列变量来跟踪所收集的信息。

清单 12 展示了整个脚本。打开一个编辑器,并将代码粘贴到其中,然后在系统中将该文件保存为 tmp.py。然后,对该文件运行 chmod + x,使它成为可执行文件(假定您使用 UNIX? 系统)。

清单 12. tmp.py

#!/usr/bin/python

import os

from time import strftime

stamp = strftime("%Y-%m-%d %H:%M:%S")

logfile = '/path/to/your/logfile.log'

path = '/path/to/tmp/directory/'

files = os.listdir(path)

bytes = 0

numfiles = 0

for f in files:

if f.startswith('sess_'):

info = os.stat(path + f)

numfiles += 1

bytes += info[6]

if numfiles > 1:

title = 'files'

else:

title = 'file'

string = stamp + " -- " + str(numfiles) + " session "

+ title +", " + str(bytes) + " bytes "

file = open(logfile,"a")

file.writelines(string)

file.close()

在第一行中,您可以看到一个 hash-bang 行:它用于标识 Python 解释器的位置。在我的系统中,它位于 /usr/bin/python。请根据系统需求调整这一行。

接下来的两行用于导入特定的模块,这些模块将帮助您执行作业。考虑到脚本需要处理文件夹和文件,因此您需要导入 os 模块,因为其中包含各种函数和方法,可帮助您列出文件、读取文件和操作文件夹。您还需要写入一个日志文件,因此可以为条目添加一个时间戳 — 这就需要使用时间函数。您不需要所有时间函数,只需要导入 strftime函数即可。

在接下来的六行中,您设置了一些变量。第一个变量是 stamp,其中包含一个日期字符串。然后,您使用 strftime 函数创建了一个特定格式的时间戳 — 在本例中,时间戳的格式为 2010-01-03 12:43:03。

接下来,创建一个 logfile 变量,并在文件中添加一个实际存储日志文件消息的路径(该文件不需要实际存在)。为简单起见,我在 /logs 文件夹中放置了一个日志文件,但您也可以将它放置在别处。同样,path 变量包含到 /tmp 目录的路径。您可以使用任何路径,只要使用斜杠作为结束即可 (/)。

接下来的三个变量也非常简单:files 列表包含指定路径中的所有文件和文件夹,另外还包含 bytes 和 numfiles 两个变量。这两个变量都设置为 0;脚本会在处理文件时递增这些值。

完成所有这些定义之后,接下来就是脚本的核心了:一个简单的 for 循环,用于处理文件列表中的各文件。每次运行循环时,脚本都会计算文件名;如果它以 sess_ 开头,则脚本会对该文件运行 os.stat(),提取文件数据(比如创建时间、修改时间和字节大小),递增 numfiles 计数器并将该文件的字节大小累计到总数中。

当循环完成运行后,脚本会检查 numfiles 变量中的值是否大于 1。如果大于 1,则会将一个新的 title 变量设置为 files;否则,title 将被设置为单数形式的 file。

脚本的最后部分也非常简单:您创建了一个 string 变量,并在该变量中添加了一行以时间戳开始的数据,并且其后还包含 numfiles(已转换为字符串)和字节(也已转换为字符串)。请注意继续字符();该字符可允许代码运行到下一行。它是一个提高可读性的小技巧。

然后,您使用 open() 函数以附加模式打开日志文件(毕竟始终需要在该文件中添加内容),writelines() 函数会将字符串添加到日志文件中,而 close() 函数用于关闭该文件。

现在,您已经创建了一个简单的 Python 脚本。该脚本可用于完成许多任务,举例来说,您可以设置一个 cron作业来每小时运行一次这个脚本,以帮助您跟踪 24 小时内所使用的 PHP 会话的数量。您还可以使用 jQuery 或其他一些 JavaScript 框架通过 Ajax 连接这个脚本,用于为您提供日志文件提要(如果采用这种方式,则需要使用 print命令来返回数据)。

阅读全文

与python调用php接口相关的资料

热点内容
单片机服务器编译 浏览:768
单口usb打印机服务器是什么 浏览:859
战地五开服务器要什么条件 浏览:954
在word中压缩图片大小 浏览:253
javatomcat图片 浏览:417
程序员生产智能创意 浏览:65
汇和银行app怎么登录 浏览:381
腾讯服务器如何上传源码 浏览:745
单片机的原理概述 浏览:508
火控pdf 浏览:267
如何复制云服务器centos环境 浏览:984
债权pdf 浏览:303
红色番字的app怎么下载 浏览:876
云服务器流程教课 浏览:702
中国农业银行app怎么没有网 浏览:997
几率表算法 浏览:902
程序员理工科 浏览:708
企业邮箱登录收件服务器地址 浏览:560
计算机思维与算法设计的重要性 浏览:664
linux刷新磁盘命令 浏览:78