Выполнение php-кода на Python


По какой-то причине мне нужно запустить php-скрипт, чтобы получить изображение с Python. Поскольку php-скрипт очень большой и он не мой, мне потребуется несколько дней, чтобы найти правильный используемый алгоритм и перевести его на python.

Мне интересно, есть ли какой-нибудь способ запустить php-скрипт с несколькими параметрами, который возвращает изображение на python.

 22
Author: TheCodeArtist, 2012-01-24

5 answers

Пример кода:

import subprocess

# if the script don't need output.
subprocess.call("php /path/to/your/script.php")

# if you want output
proc = subprocess.Popen("php /path/to/your/script.php", shell=True, stdout=subprocess.PIPE)
script_response = proc.stdout.read()
 35
Author: xdazz, 2012-01-24 09:29:49

Вы можете просто выполнить исполняемый файл php из Python.

Редактировать: пример для Python 3.5 и выше с использованием subprocess.run:

import subprocess

result = subprocess.run(
    ['php', 'image.php'],    # program and arguments
    stdout=subprocess.PIPE,  # capture stdout
    check=True               # raise exception if program fails
)
print(result.stdout)         # result.stdout contains a byte-string
 11
Author: Sjoerd, 2017-03-06 15:32:25

Вы можете использовать php.py . Это позволит вам выполнять php-код на python, как в этом примере (взято из здесь):

php = PHP("require '../code/private/common.php';")
code = """for ($i = 1; $i <= 10; $i++) { echo "$i\n"; }"""
print php.get_raw(code)
 5
Author: Wesley, 2012-01-24 09:36:50

Создайте оболочку вокруг PHP-скрипта, которая:

  • выполняет работу (если я хорошо понимаю, это создание образа),
  • затем перенаправляет (301 Перемещенный навсегда ) на изображение результата,
  • (кроме того, изображение должно быть когда-нибудь удалено).

Таким образом, вы можете обратиться к этому сервису (PHP-скрипт) с простым HTTP-запросом, откуда угодно, вы можете протестировать его в браузере, использовать из Python prg, вам нужно просто загрузить изображение обычным путь.

Кроме того, если у вас есть такая автономная подсистема, не стесняйтесь реализовывать ее с помощью другого языка/техники. У этого есть несколько преимуществ, например, вы можете установить эту службу на другом хосте.

Рекомендуемое чтение: Сервис-ориентированная архитектура в Википедии.

 3
Author: ern0, 2012-01-24 09:22:30

Если вы можете запустить PHP-скрипт локально из командной строки, подпроцесс.check_output() позволит вам использовать PHP и зафиксирует возвращаемое значение.

Если вы получаете доступ к PHP через сокет, то вы можете использовать urllib.urlopen() или urllib.urlretrieve() для удаления ресурса.

 3
Author: Raymond Hettinger, 2012-01-24 09:27:46