前言
python调用php代码实现思路:php文件可通过在terminal中使用php命令行进行调用,因此可使用python开启子进程执行命令行代码。函数所需的参数可通过命令行传递。
测试环境
1、操作系统:macos10.13.2
2、php版本:php 7.1.7(mac自带)
3、python版本:python3.6.0
4、python库:subprocess
调用php函数
php命令行调用php文件中的函数
php文件:test_hello.php
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
<?php function hello_world($s1) { $str1 = $s1; echo $str1; echo "\n" ; } function hello_world2($s1, $s2) { $str1 = $s1; $str2 = $s2; echo $s1; echo "**********" ; echo $s2; echo "\n" ; } / / 获取参数,索引为 0 为调用的文件路径,索引为 1 为调用的函数,索引为 2 为函数传入参数$s1,索引为 3 为函数参数$s2 var_dump($argv); / / exit; / / 调用函数 $func_name = $argv[ 1 ]; if ($func_name = = "hello_world" ) { / / 参数 1 $param1 = $argv[ 2 ]; hello_world($param1); } elseif ($func_name = = "hello_world2" ) { / / 参数 1 $param1 = $argv[ 2 ]; / / 参数 2 $param2 = $argv[ 3 ]; hello_world2($param1, $param2); } else { echo "the function $func_name is not exist !" ; } ?> |
terminal执行php命令
1
2
3
4
|
# 字符串中包含空格、逗号、反斜杠,需要使用""来确定为1个参数 php - f test_hello.php hello_world "my name is john\\, age is 20." php - f test_hello.php hello_world2 "my name is john\\, age is 20." "my hometown is baoding." php - f test_hello.php hello_world3 "my name is john\\, age is 20." |
执行结果
python子进程执行php命令行
python文件:test.py,将test_hello.php与test.py放在同目录下运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import subprocess class test( object ): def run( self , cmd): proc = subprocess.popen(cmd, shell = true, stdout = subprocess.pipe) # 开启子进程 res = proc.stdout.read() if res: res = res.decode() return res cmd1 = 'php -f test_hello.php hello_world "my name is john\\, age is 20."' cmd2 = 'php -f test_hello.php hello_world2 "my name is john\\, age is 20." "my hometown is baoding."' cmd3 = 'php -f test_hello.php hello_world3 "my name is john\\, age is 20."' obj = test() for i in [cmd1, cmd2, cmd3]: res = obj.run(cmd1) print (res) print ( "*" * 10 ) |
到此这篇关于python如何调用php文件中函数的文章就介绍到这了,更多相关python调用php函数内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/xiaofeiyuan/article/details/111869182