是否可以在PHP中运行Python脚本并相互传输变量?
我有一个以某种全球方式废弃网站数据的课程。我想让它更具体,并且已经有几个网站特有的pythons脚本。
我正在寻找一种方法将这些内容纳入我的班级。
两者之间的数据传输安全可靠吗?如果是这样的话会变得多么困难?
答案 0 :(得分:59)
您通常可以使用通用语言格式在语言之间进行通信,并使用stdin
和stdout
来传达数据。
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 server和client
phpxmlrpc库同时具有客户端和服务器
都有例子答案 2 :(得分:1)
最好的办法是将python作为子进程运行并捕获其输出,然后解析它。
$pythonoutput = `/usr/bin/env python pythoncode.py`;
使用JSON可能有助于在两种语言中轻松生成和解析,因为它是标准的,并且两种语言都支持它(嗯,至少非古代版本)。在Python中,
json.dumps(stuff)
然后在PHP中
$stuff = json_decode($pythonoutput);
您还可以明确地将数据保存为文件,或者使用套接字,或者根据您需要的确切方案,使用许多不同的方法来提高效率(并且更复杂),但这是最简单的。
答案 3 :(得分:1)
刚遇到同样的问题,想分享我的解决方案。 (紧跟Amadan建议的那样)
import subprocess
output = subprocess.check_output(["php", path-to-my-php-script, input1])
你也可以这样做:blah = input1而不只是提交一个未命名的arg ...然后使用$ _GET ['blah']。
$blah = $argv[1];
if( isset($blah)){
// do stuff with $blah
}else{
throw new \Exception('No blah.');
}