2012-01-24 50 views
18

出于某种原因,我必须运行一个php脚本来从Python获取图像。由于php脚本非常大,而且它不是我的,所以需要花几天时间才能找到正确的算法并将其转换为python。在Python中执行php代码

我不知道是否有任何方法可以运行php脚本,只有少数参数,它返回一个图像,在python中。

回答

32

示例代码:

import subprocess 

# if the script don't need output. 
subprocess.call("php /path/to/your/script.php") 

# if you want output 
proc = subprocess.Popen("php /path/to/your/script.php", shell=True, stdout=subprocess.PIPE) 
script_response = proc.stdout.read() 
+2

这是从http://mail.python.org/pipermail/tutor/2009-October/071973.html – Alvin

+7

粘贴的代码,它是不正确的。第一次调用不适用于POSIX系统。改用'subprocess.call([“php”,“/path/to/your/script.php”])。使用'script_response = subprocess.check_output([“php”,“/path/to/your/script.php”])'而不是第二个例子。 – jfs

+0

如果参数'shell'设置为'True',那么使用字符串而不是列表是好的 – Valen

5

您可以简单地从Python执行php可执行文件。

编辑:例如为Python 3.5和更高的使用subprocess.run

import subprocess 

result = subprocess.run(
    ['php', 'image.php'], # program and arguments 
    stdout=subprocess.PIPE, # capture stdout 
    check=True    # raise exception if program fails 
) 
print(result.stdout)   # result.stdout contains a byte-string 
+0

你可以发布任何的例子吗? – jiahao

+0

http://mail.python.org/pipermail/tutor/2009-October/071973.html – Sjoerd

+0

假设可以从命令行调用php脚本并接受命令行参数来描述如何处理图像使用内置的子进程包。 导入子程序 subprocess.call([“/ path/to/php”,“/path/to/php/script.php”,“argument”]) –

2

让周围的PHP脚本,它的包装:

  • 执行的东西(如果我没理解好,这是一个图像
  • 然后重定向(301永久移动)到结果图像, ,图像应该有一天清除)。

所以,你可以参考这个服务(PHP脚本)用一个简单的HTTP请求,从任何地方,你可以用浏览器进行测试,在Python PRG使用,你只需要下载图像的常用方法。

另外,如果你有这样一个独立的子系统,不要不好意思用不同的语言/技术来实现它。它有几个优点,例如您可以在不同的主机上安装该服务。

推荐阅读:Service-Oriented Architecture基于维基百科。

+0

这是一个非常不错的主意!我想它可以解决我的问题。非常感谢。 – jiahao

4

您可以使用php.py。这将允许你在Python在这个例子中(从here拍摄)执行PHP代码,如:

php = PHP("require '../code/private/common.php';") 
code = """for ($i = 1; $i <= 10; $i++) { echo "$i\n"; }""" 
print php.get_raw(code) 
+0

嗨。谢谢你的帮助。如果你检查这个程序的源代码,你可以看到我必须手动输入php代码。由于它也链接到一些.inc文件,所以它不是那么好的选择。不过谢谢。 – jiahao