Python 在PHP程序中调用执行Python脚本

作者: 高杆python | 来源:发表于2017-09-19 16:26 被阅读239次

    突然发现已经有一个半月多的时间没有在简书上写点东西了!最近身边发生的事情比较多,要处理的事情也很多,工作上的、生活中的、琐碎的、零散的、好的、坏的以及该来的和不该来的......。也许、大概、有可能这些就是生活给我们带来的羁绊与牵挂吧!好了,不提这些感悟性的言语了,几个月前,我在简书上注册用户的目的很简单,就是为了来这里学习Python和分享在Python编程的乐趣,在这几个月的时间了,写过的这点东西也都是和Python有关的,Python网络爬虫、Python树莓派编程。

    Programming Languages
    今天要和大家分享的是在PHP程序中调用执行Python脚本,起初是为了实现一个小需求,想要在JQuery执行的AJAX异步请求时在服务器端调用执行Python脚本。而Windows服务器端部署的WEB环境是Apache+PHP,在AJAX异步请求时根本不能直接调用Python脚本,因为web开发语言是php而非Python的Django和Flask等开发框架。AJAX是可以调用执行服务器端的脚本文件,但它的本质仍是HTTP的请求。所以就只能在HTTP请求中想办法调用Python脚本,也就在PHP程序中调用执行python脚本。这里就要用到PHP的内置函数exec() 和system() ;
    1.PHP的exec() 和system() 函数区别:
    (1)system()
    原型:string system (string command [, int return_var])
    system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。
    (2)exec()
    原型:string exec (string command [, string array [, int return_var]])
    exec ()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。
    可以看出两个函数的区别就是PHP在调用执行外部命令后,system()函数将执行的结果输出并返回给PHP程序。而 exec() 函数在调用执行外部命令后不会将结果输出,只是返回结果。
    2.程序代码实现和对比:
    (1)in.php程序使用exec()函数代码及解析:
    in.php代码
    (2)test.py程序代码:
    test.py程序代码
    (3)PHP程序执行后效果1:
    调用test.py的执行结果.png
    这样就利用exec()函数实现了对python脚本的调用,下面说一下将in.php程序中的exec()函数替换成system()函数后的执行效果。
    (4)in.php程序使用system()函数代码及解析:
    php中使用system函数
    (5)PHP程序执行后效果2:
    system函数的执行结果
    可以看出使用system()函数时,执行python程序时不但返回结果,而且将结果输出了,而exec()函数只是返回结果,没有输出。
    3.扩展应用:(php web开发数据调用)
    想要在网页上显示其它网站上的数据内容时,都需要网站提供数据的调用接口直接调用,如果没有接口,就需要用爬虫将数据爬回来后保存到数据库,在用程序从数据库中取出数据展示出来。(当然也可以用到php的curl库进行数据爬取后进行展示,但是个人认为在编程语言中做爬虫最简单并且强大的还是Python),而如果在PHP程序中直接调用python脚本进行爬虫,然后再将数据展示到网页上,这样就可以省去插入数据到数据库和从数据库读取数据的过程,这种做法对一些实时数据的爬取还是比较有用的,但是一定会影响网页的加载速度。下面将以前写的一个爬虫爬到的数据直接展示到web网页上供大家参考。
    (1)php程序代码:
    <?PHP
    $output=exec('python test1.py');
    echo $output;
    ?> 
    

    (2)python爬虫代码:

    import requests
    import json
    class WeatherSpider(object):
        def __inti__(self):
            pass
        def request(self,url):
            headers = {
            'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36',
            'Referer': 'http://www.weather.com.cn/weather40d/101060201.shtml'
            }
            return requests.get(url,headers=headers)
        def create_url(self):
            year = '2016'
            for i in range(1,2):
                month = str(i) if i > 9 else "0" + str(i)
                url = "http://d1.weather.com.cn/calendar_new/" + year + "/101060201_" + year + month + ".html"
                self.get_data(url)
        def get_data(self,url):
            respone = self.request(url).content
            json_str = respone.decode(encoding='utf-8')[11:]
            weathers = json.loads(json_str)
            data = ""
            for weather in weathers:
                data = data+weather.get('date')+'星期'+weather.get('wk')+weather.get('hmax')+weather.get('hmin')+weather.get('hgl')+"<br>"
            print (data)
    if __name__ == '__main__':
        jl_weather = WeatherSpider()
        jl_weather.create_url()
    

    (3)web网页爬虫展示:


    爬虫数据web网页展示

    相关文章

      网友评论

        本文标题:Python 在PHP程序中调用执行Python脚本

        本文链接:https://www.haomeiwen.com/subject/hpmwsxtx.html