Fullstar

Archives

  • December 2025
  • August 2024
  • July 2024
  • February 2024
  • November 2023
  • August 2023
  • July 2023
  • January 2023
  • November 2022
  • October 2022
  • September 2022
  • February 2022
  • January 2022
  • September 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020

Categories

  • Code
  • Lens
  • Life
0
Fullstar
  • Code

php调用python脚本

  • July 5, 2020
  • Brandon

Looking for a Shorter Overview?

AI Summary

PHP可通过exec或system调用Python解释器执行脚本,并用sys.argv接收传入参数。文章说明如何获取输出和错误信息,同时提醒权限、含空格字符串及中文参数编码等常见问题。

Key Moments

AI-generated
1

使用exec调用脚本

通过exec执行python test.py并传参,输出数组接收Python的print结果,返回码判断执行是否成功。
2

用sys.argv接收参数

Python从sys.argv读取命令行参数,其中索引0是脚本路径,外部参数从索引1开始。
3

重定向错误排查

在命令后加入2>&1,将错误输出合并到结果数组以便在浏览器中查看失败原因。
4

处理调用常见坑点

浏览器调用失败需检查Apache文件权限,含空格参数需加双引号,中文参数可能出现UTF-8解码问题。
Total
0
Shares
0
0
0

1.php使用exec函数,函数原型:

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

2.php使用system函数,函数原型:

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

实例:

<?php
    exec("python test.py 100",$date,$ret);
    echo($date[0]);
    //上述代码表示使用python解释器调用test.py,并传入100作为参数,$date为.py文件的输出值,且输出形式为print(),而不是return,$ret判断是否调用成功,成功为0,否则为非0值
?>
import sys
list = sys.argv
print(list[1])
#sys.argv是一个参数列表,这个列表存放着从外界获取到的参数(可能有多个),list[0]默认代表执行的py文件相对于当前工作目录的路径,因此从外界得到的值由[1]开始

注意:在调用过程中可能有各种错误的发生,可使用如下指令进行替换以观察错误原因:

exec("python test.py 2>&1",$ret);
print_r($ret);
#替换为上述指令后在浏览器中执行时将会直接输出错误原因

坑点:

1.若php在命令行模式下正常运行而在浏览器中无法运行则很可能为权限问题,将代码所在文件权限设置为apache即可:

chown -R apache:apache /var/www/html/wordpress/forTest

2.当php使用exec/system向python传递参数时,由于参数以空格划分,因此若所传递的参数为字符串且字符串带有空格,则应在传递此参数前为其加上双引号,则传递至python时才能将其视为一个字符串整体

3.当 php使用exec/system向python传递中文参数时,会报错utf8无法解码等错误,目前的解决方案为使用mysql数据库中转,暂未找到其他解决方案。。。 (PS: 可尝试此方法: PHP接收Python的传值 【php向python传值】)

参考链接:

  • sys.argv的意义及用法
  • PHP exec函数调用执行 Linux Shell命令及错误码解析
  • php连接mysql数据库
  • Python连接MySQL数据库【注:由于python3取消了MySQLdb,因此需先引入代码:[import pymysql pymysql.install_as_MySQLdb()]再引入 MySQLdb 才能正常使用】

Related Posts

AI-generated

将python脚本挂至服务器后台自动运行

一条 nohup 命令即可让 Python 脚本脱离终端持续运行,标准输出和错误输出统一写入日志;再配合 jobs、fg、bg、kill 管理后台任务。
51.1% match July 5, 2020

Linux运行程序与shell编程

从g++生成可执行文件,到重定向标准输出与错误输出,再用变量、test、条件分支和循环组织Shell命令,快速建立Linux命令行自动化基础。
50% match December 8, 2020

Questions Answered

AI-generated

PHP如何调用Python脚本并获取输出?

使用exec执行解释器命令,数组接收print输出并检查返回码。

Python如何接收PHP传入的命令行参数?

通过sys.argv读取参数列表,实际传值从索引1开始。

调用Python脚本报错时如何查看原因?

命令末尾加入2>&1,将标准错误输出到结果数组。

PHP向Python传参有哪些常见问题?

注意Apache权限、空格字符串引号及中文UTF-8编码错误。

Next Up

后台运行脚本
掌握Shell脚本
Shell 实用指令
掌握目录与命令
Total
0
Shares
Share 0
Tweet 0
Pin it 0
Brandon

Previous Article
  • Code

华为云鲲鹏服务器安装wordpress

  • July 5, 2020
  • Brandon
View Post
Next Article
  • Code

将python脚本挂至服务器后台自动运行

  • July 5, 2020
  • Brandon
View Post
You May Also Like
View Post
  • Code

Letta部署记录

  • Brandon
  • December 26, 2025
View Post
  • Code

WordPress 后台任务利器:使用 BGRunner 构建可靠的异步处理

  • Brandon
  • December 14, 2025
View Post
  • Code

WordPress image offload

  • Brandon
  • December 14, 2025
View Post
  • Code

ComfyUI应用手册

  • Brandon
  • December 6, 2025
View Post
  • Code

Leetcode Java常用代码

  • Brandon
  • February 17, 2024
View Post
  • Code

Golang入门

  • Brandon
  • February 4, 2024
View Post
  • Code

Setting Up and Maintaining a Ubuntu Environment for My Home Server

  • Brandon
  • November 24, 2023
View Post
  • Code

Swift Learning Log

  • Brandon
  • August 31, 2023

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Fullstar

Input your search keywords and press Enter.

将python脚本挂至服务器后台自动运行

Linux运行程序与shell编程

Linux shell常用指令

linux文件系统

Emacs配置python环境

WordPress 后台任务利器:使用 BGRunner 构建可靠的异步处理

UP NEXT

将python脚本挂至服务器后台自动运行

51.1% match July 5, 2020 0