PHP程序中怎么运行Python脚本

一、exec()

执行一个外部程序

exec ( string $command [, array &$output [, int &$return_var ]] ) : string

参数说明:

command:要执行的命令,其中包括三个子串,名列前茅个子串为使用的当前系统的解释器,第二个子串为所要执行脚本的位置,第三个子串为所需传入的参数不限个数,中间用空格分隔,注意格式。子串间使用空格分割。

output:如果提供了 output 参数,那么会用命令执行的输出填充此数组,每行输出填充数组中的一个元素。(说明:output 中存放的并非python中return的值,并且所有return的值都不会进行保存,output 中存放的是python脚本中输出的值,即为 print() 函数所输出的所有数据)

return_var:如果同时提供 output 和 return_var 参数,命令执行后的返回状态会被写入到此变量。

1、直接运行

index.php

<?php$re = exec('python ceshi.py', $out);// $re = iconv('gbk', 'utf-8', $re);var_dump($out);echo '<br/>';var_dump($re);

ceshi.py

def send():    data = '1,2,3,4,5'    print(data)if __name__ == '__main__':    send()

(重要说明:如果Python脚本返回的数据中含有中文,需要使用 iconv(‘gbk’, ‘utf-8’, $re); 进行转义)

PHP程序中怎么运行Python脚本

2、传参,接收返回数据

inde.php

$canshu1 = '这是PHP传过来的参数';$canshu2 = date('Y-m-d');$re = exec("python ceshi.py $canshu1 $canshu2");$re = iconv('gbk', 'utf-8', $re);var_dump($re);

test.py

import sysdef send():    # a1 = sys.argv[1]    # a2 = sys.argv[2]    re = sys.argv[1:]    data = '1,2,3,4,5,' + ','.join(re) # 转字符串    print(data)if __name__ == '__main__':    send()

导入sys包,使用sys.argv[]数组获取传入参数,名列前茅个传入参数为sys.argv[1],第二个为sys.argv[2]以此类推,不要使用argv[0]

PHP程序中怎么运行Python脚本

接收返回 json 数据:

import sysimport jsondef send():    dict = {'id':111, 'title':'测试title'}    dict['data'] = sys.argv[1:]    jsonArr = json.dumps(dict, ensure_ascii=False)    print(jsonArr)if __name__ == '__main__':    send()

(涉及到中文字符的时候,需要指定ensure_ascii=False)

PHP程序中怎么运行Python脚本

二、system()

执行外部程序,并且显示输出

system ( string $command [, int &$return_var ] ) : string

同 C 版本的 system() 函数一样,本函数执行 command 参数所指定的命令,并且输出执行结果。

如果 PHP 运行在服务器模块中, system() 函数还会尝试在每行输出完毕之后,自动刷新 web 服务器的输出缓存。

如果要获取一个命令未经任何处理的 原始输出,请使用 passthru() 函数。

index.php

<?phpecho '这是运行直接输出:';$re = system('python ceshi.py');// $re = iconv('gbk', 'utf-8', $re);echo '<br/>';echo '这是赋值输出:';var_dump($re);

这里使用最初版本的 test.py,输出效果如下:

PHP程序中怎么运行Python脚本

三、passthru()

执行外部程序,并且显示输出

passthru ( string $command [, int &$return_var ] ) : void

同 exec() 函数类似, passthru() 函数 也是用来执行外部命令(command)的。当所执行的 Unix 命令输出二进制数据,并且需要直接传送到浏览器的时候,需要用此函数来替代 exec() 或 system() 函数。常用来执行诸如 pbmplus 之类的可以直接输出图像流的命令。通过设置 Content-type 为 image/gif,然后调用 pbmplus 程序输出 gif 文件,就可以从 PHP 脚本中直接输出图像到浏览器。

index.php

echo '这是运行直接输出:';$re = passthru('python ceshi.py');// $re = iconv('gbk', 'utf-8', $re);echo '<br/>';echo '这是赋值输出:';var_dump($re);

这里使用最初版本的 test.py,输出效果如下:

PHP程序中怎么运行Python脚本

“PHP程序中怎么运行Python脚本”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

文章标题:PHP程序中怎么运行Python脚本,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/24303

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月10日 下午11:51
下一篇 2022年9月10日 下午11:52

相关推荐

  • Web Application核心防御机制是什么

    为防止恶意输入,应用程序实施了大量的安全机制,而这些安全机制在概念上都具有相似性。 这些安全机制由以下几个方面组成: 1、处理用户访问web应用程序的数据与功能(防止未授权访问) 2、处理用户对web应用程序功能输入的数据(防止构造恶意数据) 3、应对攻击(处理预料外的报错、自动阻止明显的攻击、自动…

    2022年9月24日
    48900
  • todesk如何听到对方电脑声音

    todesk听到对方电脑声音的方法 1、首先点击电脑开始菜单,点击“运行” 2、输入gpedit.msc后,点击确定 3、打开计算机配置菜单下的管理模板,点击所有设置。 4、找到并双击打开“允许音频和视频播放重定向”选项 5、勾选已启用,点击确定保存设置并重启就可以了。 关于“todesk如何听到对…

    2022年9月26日
    7.2K00
  • mysql如何解决错误2013

    解决方法:1、在命令行输入mysql进入交互模式,利用“SET GLOBAL connect_timeout = 60;”命令去修改全局的超时时间即可;2、在开始菜单处搜索服务并进入系统的服务列表,在服务列表之中找到mysql右键选择启动,重新连接即可。 本教程操作环境:windows10系统、my…

    2022年8月31日
    74100
  • word图片不能全部显示怎么解决

    解决方法: 1、首先新建一个word文档,然后插入图片,此时会发现插入的图片仅显示一小部分。 2、然后将光标位置置于图片的末尾,并右击鼠标,进入“段落”选项。 3、然后需要切换到“缩进与间距”选项卡中。 4、在该选项卡中,将“行距”设置为“单倍行距”,点击保存并退出。 5、此时在进入word查看显示…

    2022年9月20日
    1.4K00
  • Apache Flink未授权访问远程代码命令执行的复现

    Apache Flink未授权访问-远程代码命令执行漏洞复现 Apache Flink Dashboard默认没有用户权限认证。攻击者可以通过未授权的Flink Dashboard控制台,直接上传木马jar包,可远程执行任意系统命令获取服务器权限,风险极大。 二、影响版本 Apache Flink …

    2022年9月10日
    1.5K00
  • windows移动光标到文件末尾的快捷键是什么

    移动光标到文件末尾的快捷键组合是“CTRL+END”;CTRL的全称是control,是键盘中的控制键,编辑文本时,若光标不在最后,按下END键,光标会定位到最后面;如果是一篇文档,按“CTRL+END”,光标会定位到文档的最后。 本教程操作环境:windows10系统、DELL G3电脑。 移动光…

    2022年9月15日
    1.4K00
  • 如何解决mysql深分页问题

    日常需求开发过程中,相信大家对于limit一定不会陌生,但是使用limit时,当偏移量(offset)非常大时,会发现查询效率越来越慢。一开始limit 2000时,可能200ms,就能查询出需要的到数据,但是当limit 4000 offset 100000时,会发现它的查询效率已经需要1S左右,…

    2022年9月13日
    1.7K00
  • mysql索引的查询语句怎么写

    mysql索引的查询语句是“SHOW INDEX”,可以返回与当前数据库或指定数据库中的表关联的索引信息,完整语法“SHOW INDEX FROM 表名 [FROM 数据库名];”;其中,“FROM 数据库名”选项是可选的,省略则返回当前数据库中表关联的索引信息,若不省略则返回指定数据库中表的索引信…

    2022年9月26日
    97100
  • 刀塔用什么服务器

    DOTA 2, commonly known as 刀塔 in Chinese, operates using a pool of dedicated servers provided by Valve, its developer, and are hosted in various region…

    2024年4月23日
    700
  • Node.js源码中cjs模块的加载过程是什么

    相信大家都知道如何在 Node 中加载一个模块: const fs = require(‘fs’);const express = require(‘express’);const anotherModule = require(‘./another-module’); 没错,require 就是加…

    2022年9月8日
    59700
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部