从Python运行PHP脚本 - 将值从Python传递给PHP
解决方案:解决方案链接 ------------------------------------------------------------------
我想在一个Python脚本中执行PHP标准库里的函数getimagesize()
。这个函数需要从Python传入一个图片的路径。
我知道怎么在Python中运行一个PHP脚本,但我不知道怎么把参数从Python传给PHP,然后再把结果拿回Python。
这是我在Python脚本中的内容:
def php_script_runner(script_path):
p = subprocess.Popen(['php', script_path], stdout=subprocess.PIPE)
result = p.communicate()[0]
return result
这是我在PHP文件中的内容(我不太确定怎么给它传参数):
<?php getimagesize() ?>
我该如何把参数传给'get_image_size.php'
,然后让它把结果返回到Python中,以便进一步处理呢?
我还想把这个想法扩展到其他自定义的PHP函数。这个问题的主要目标不仅仅是找出图片的大小,而是将来能够使用这个方法来处理其他需要PHP的功能。
这个问题的主要目标是确定:
- 如何在Python中调用PHP脚本
- 如何从Python向PHP脚本发送参数
- 如何将PHP脚本的输出解析回Python中
3 个回答
如果我是你,我会把Python的结果输出成一个JSON(或者可能是XML)对象,然后用PHP脚本重新读取这些信息。如果有可能的话,我强烈建议把这两种语言分成两个不同的网页,甚至可以让Python通过一种叫做GET
的方式把数据返回到页面上,也就是我们常说的API风格。
使用Python图像库PIL有什么问题呢?
from PIL import Image
im=Image.open(filepath)
print im.size # (height,width) tuple
用PHP脚本来获取图像的尺寸,这样做真是不太对。我想不出有什么是PHP比Python做得更好的,值得同时使用这两种语言的运行环境 :)
我的建议是:一次专注于一种语言,先把Python的标准库学好 :) 如果你能在PHP中做到的事情,应该在Python中也能轻松实现。
解决方法是这样做的:
Python:
import subprocess
import json
import sys
import os
def php(script_path, argument):
p = subprocess.Popen(['php', script_path, argument], stdout=subprocess.PIPE)
result = p.communicate()[0]
return result
image_dimensions_json =str(php("get_image_size.php", image_location_relative[1:]))
dic = json.loads(image_dimensions_json)
print str(dic["0"]) + "|" + str(dic["1"])
这里提到的 [1:]
是因为路径中的 "/" 会导致错误。我发现去掉它就解决了这个问题。
PHP:
<?php
echo(json_encode(getimagesize($argv[1])));
?>
echo
或 print_r
都可以用。我发现把数组转换成 JSON 很简单,因为 Python 的标准库里自带了 JSON 解码器。
希望这对大家有帮助!我打算用这个概念来实现更大的 PHP 函数。