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

Net*_*eta 24 php python

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

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

我正在寻找一种方法来将我的课程纳入其中.

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

Tom*_*rdt 61

您通常可以使用通用语言格式在语言之间进行通信,以及使用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);
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

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)
Run Code Online (Sandbox Code Playgroud)

  • 如果你正在经历从Python脚本`NULL`回报,这可能意味着`escapeshellarg()`从编码的JSON借双引号了,使其无效JSON,因此造成`json.loads()'失败.尝试在php中使用`base64_encode();`代替`escapeshellarg();`,在python中使用`import base64` /`base64.b64decode()`.另外,如果它包含空格''python"path/that/has spaces/script.py"'`就像我的情况一样,不要忘记用双引号包装你的路径.干杯! :) (5认同)
  • 哪里应该是script.py?我在php页面得到null! (4认同)
  • 你的php示例看起来很简单 (2认同)

dbr*_*dbr 10

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

Python有一个内置的XML-RPC服务器和一个客户端

PHPXMLRPC库有一个客户端和服务器

Python服务器和客户端以及PHP客户端服务器都有示例