Подтвердить что ты не робот

Выполнение Python script в PHP и обмен данными между двумя

Можно ли запустить Python script внутри PHP и передавать переменные друг от друга?

У меня есть класс, который обрывает сайты для данных определенным глобальным способом. я хочу, чтобы он стал намного более конкретным и уже имел скрипты pythons, характерные для нескольких веб-сайтов.

Я ищу способ включить те, что находятся в моем классе.

Возможно ли безопасная и надежная передача данных между двумя? если да, то как трудно получить что-то подобное?

4b9b3361

Ответ 1

Обычно вы можете общаться между языками, используя общие языковые форматы, и использовать stdin и stdout для передачи данных.

Пример с PHP/Python с использованием аргумента оболочки для отправки исходных данных через 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)

Ответ 2

Вы ищете "межпроцессную связь" (IPC) - вы можете использовать что-то вроде XML-RPC, которое в основном позволяет вам вызывать функцию в удаленном процессе и обрабатывает перевод всех типов данных аргументов между языками ( поэтому вы можете вызвать функцию PHP из Python или наоборот - до тех пор, пока аргументы поддерживаемый тип)

Python имеет встроенный XML-RPC-сервер и клиент

В библиотеке phpxmlrpc есть клиент и сервер

Есть примеры для обоих: сервер и клиент Python и PHP и сервер

Ответ 3

У меня была такая же проблема и я хотел поделиться своим решением. (следует за тем, что предлагает Амадан)

часть python

import subprocess

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

вы также можете сделать: blah = input1 вместо того, чтобы просто отправить неназванный аргумент... и затем использовать $_GET ['blah'].

php

$blah = $argv[1];



if( isset($blah)){

    // do stuff with $blah

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

Ответ 4

Лучше всего запустить python в качестве подпроцесса и захватить его вывод, а затем разобрать его.

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

Использование JSON, вероятно, поможет упростить как производство, так и анализ на обоих языках, поскольку он поддерживает стандартный и оба языка (ну, по крайней мере, не древние версии). В Python

json.dumps(stuff)

а затем в PHP

$stuff = json_decode($pythonoutput);

Вы также можете явно сохранять данные в виде файлов или использовать сокеты или иметь много разных способов сделать это более эффективным (и более сложным) в зависимости от точного сценария, который вам нужен, но это самый простой.