Выполнение php-кода на Python
По какой-то причине мне нужно запустить php-скрипт, чтобы получить изображение с Python. Поскольку php-скрипт очень большой и он не мой, мне потребуется несколько дней, чтобы найти правильный используемый алгоритм и перевести его на python.
Мне интересно, есть ли какой-нибудь способ запустить php-скрипт с несколькими параметрами, который возвращает изображение на python.
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()
Вы можете просто выполнить исполняемый файл 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
Создайте оболочку вокруг PHP-скрипта, которая:
- выполняет работу (если я хорошо понимаю, это создание образа),
- затем перенаправляет (301 Перемещенный навсегда ) на изображение результата,
- (кроме того, изображение должно быть когда-нибудь удалено).
Таким образом, вы можете обратиться к этому сервису (PHP-скрипт) с простым HTTP-запросом, откуда угодно, вы можете протестировать его в браузере, использовать из Python prg, вам нужно просто загрузить изображение обычным путь.
Кроме того, если у вас есть такая автономная подсистема, не стесняйтесь реализовывать ее с помощью другого языка/техники. У этого есть несколько преимуществ, например, вы можете установить эту службу на другом хосте.
Рекомендуемое чтение: Сервис-ориентированная архитектура в Википедии.
Если вы можете запустить PHP-скрипт локально из командной строки, подпроцесс.check_output() позволит вам использовать PHP и зафиксирует возвращаемое значение.
Если вы получаете доступ к PHP через сокет, то вы можете использовать urllib.urlopen() или urllib.urlretrieve() для удаления ресурса.