在PHP中执行Python脚本并在两者之间交换数据

时间:2012-12-27 00:30:24

标签: php python

是否可以在PHP中运行Python脚本并相互传输变量?

我有一个以某种全球方式废弃网站数据的课程。我想让它更具体,并且已经有几个网站特有的pythons脚本。

我正在寻找一种方法将这些内容纳入我的班级。

两者之间的数据传输安全可靠吗?如果是这样的话会变得多么困难?

4 个答案:

答案 0 :(得分:59)

您通常可以使用通用语言格式在语言之间进行通信,并使用stdinstdout来传达数据。

PHP / Python使用shell参数通过JSON发送初始数据的示例

PHP:

// This is the data you want to pass to Python
$data = array('as', 'df', 'gh');

// Execute the python script with the JSON data
$result = shell_exec('python /path/to/myScript.py ' . escapeshellarg(json_encode($data)));

// Decode the result
$resultData = json_decode($result, true);

// This will contain: array('status' => 'Yes!')
var_dump($resultData);

的Python:

import sys, json

# Load the data that PHP sent us
try:
    data = json.loads(sys.argv[1])
except:
    print "ERROR"
    sys.exit(1)

# Generate some data to send to PHP
result = {'status': 'Yes!'}

# Send it to stdout (to PHP)
print json.dumps(result)

答案 1 :(得分:10)

您正在寻找“进程间通信”(IPC) - 您可以使用类似XML-RPC的东西,它基本上允许您在远程进程中调用函数,并处理语言之间所有参数数据类型的转换(所以你可以从Python调用PHP函数,反之亦然 - 只要参数是a supported type

Python有内置XML-RPC serverclient

phpxmlrpc库同时具有客户端和服务器

Python server and clientPHP client以及server

都有例子

答案 2 :(得分:1)

最好的办法是将python作为子进程运行并捕获其输出,然后解析它。

$pythonoutput = `/usr/bin/env python pythoncode.py`;

使用JSON可能有助于在两种语言中轻松生成和解析,因为它是标准的,并且两种语言都支持它(嗯,至少非古代版本)。在Python中,

json.dumps(stuff)

然后在PHP中

$stuff = json_decode($pythonoutput);

您还可以明确地将数据保存为文件,或者使用套接字,或者根据您需要的确切方案,使用许多不同的方法来提高效率(并且更复杂),但这是最简单的。

答案 3 :(得分:1)

刚遇到同样的问题,想分享我的解决方案。 (紧跟Amadan建议的那样)

python piece

import subprocess

output = subprocess.check_output(["php", path-to-my-php-script, input1])

你也可以这样做:blah = input1而不只是提交一个未命名的arg ...然后使用$ _GET ['blah']。

php piece

$blah = $argv[1];



if( isset($blah)){

    // do stuff with $blah

}else{
    throw new \Exception('No blah.');
}