выполнение скрипта Python в PHP и обмен данными между двумя

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

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

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

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

Обычно вы можете общаться между языками, используя общие языковые форматы, и использовать 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) 

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

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

Библиотека phpxmlrpc имеет как клиент, так и сервер

Существуют примеры как для сервера Python, так и для клиента , а также для клиента и сервера PHP

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

кусок питона

 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.'); } 

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

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

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

 json.dumps(stuff) 

а затем в PHP

 $stuff = json_decode($pythonoutput); 

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