php запуск python скрипта
Как запустить скрипты Ruby/Python изнутри PHP, передавая и получая параметры?
мне нужно превратить HTML в эквивалентный текст с уценкой.
от того, что я мог обнаружить, у меня есть только два хороших варианта:
Python: Аарон Шварц html2text.py
Ruby: html2markdown Singpolyma.rb, на основе Nokogiri
Итак, с PHP мне нужно передать HTML-код, позвонить скрипт Ruby / Python и получить вывод обратно.
(кстати, такой же вопрос задал здесь фолк («как вызвать Ruby script с php?»), но без практической информации для моего случая).
следуя подсказке Железного Дровосека (рев), я добрался до этого:
с вышеизложенным я получаю это:
команда возвращена 1 Матрица ( [0] => идентификатор ресурса #17 1 => Идентификатор ресурса #18 )
и «ошибка-выход.файл txt» говорит:
Traceback (последний звонок): Файл «html2md.py», строка 5, в печать html2text.html2text (sys.аргв1) IndexError: индекс списка вне диапазона
код Ruby (все еще анализируется)
просто для записей, я пытался использовать самый простой «exec ()» PHP, но у меня есть некоторые проблемы с некоторыми специальными символами, очень распространенными для языка HTML.
оба работают хорошо. Но когда строка немного сложнее:
это не сработало вообще.
это потому, что строка html должна иметь свои специальные символы scaped. Я получил его, используя это:
теперь все работает как я сказал здесь.
Я runnig: Fedora 14 Руби 1.8.7 В Python 2.7 на Perl 5.12.2 В PHP 5.3.4 то nginx 0.8.53
5 ответов
посмотреть @Jonke это для » Лучшие практики с STDIN в Ruby?»для примеров того, как просто читать STDIN и писать в STDOUT с Ruby. «как Вы читаете из stdin в python » есть несколько хороших образцов для этого языка.
это простой пример, показывающий, как вызвать скрипт Ruby, передать ему строку через канал STDIN PHP и прочитать STDOUT скрипта Ruby:
Сохранить как «тест.в PHP»:
Сохранить как «тест.rb»:
запуск скрипта PHP дает:
скрипт PHP открывает интерпретатор Ruby, который открывается рубиновый сценарий. Затем PHP отправляет ему «hello world». Ruby обертывает полученный текст жирным шрифтом и выводит его, который захватывается PHP,а затем выводит. Нет временных файлов, ничего не передается в командной строке, вы можете передать много данных, если это необходимо, и это будет довольно быстро. Python или Perl можно легко использовать вместо Ruby.
в качестве примера кода Вы можете начать разработку решения Ruby с:
предполагая, что вы уже загрузили код HTML2Markdown и имеете его в текущем каталоге и используете Ruby 1.9.2.
в Python PHP передаст VAR в качестве аргумента командной строки, получите его из sys.argv (список аргументов командной строки, переданных Python), а затем Python распечатает вывод, который затем повторяет PHP. Пример:
процедура должна быть в основном такой же в Ruby.
используйте переменную в коде Ruby и передайте ее в качестве аргумента скрипту Ruby из кода PHP. Затем попросите скрипт Ruby вернуть обработанный код в stdout, который PHP может прочитать.
Я думаю, что ваш вопрос является неправильным. Ваша проблема как конвертировать из HTML в уценке. Я прав?
попробуйте это http://milianw.de/projects/markdownify/ я думаю, что это может помочь вам =)
еще один очень странный подход будет похож на тот, который я использовал.
Не рекомендуется, но это будет работать точно.
Настройка Atom от GitHub для работы с PHP, Python и некоторыми другими языками программирования
Изначально считаем что у Вас установлена поддерживаемая операционная система, Node.JS и Atom. В примерах мы работаем в OpenSUSE (13.1) в нём (и вообще в дистрибутивах *nix) уже «из коробки» обычно есть не только Python но PHP и другие языки программирования. Так же исправно работает на Ubuntu (>12.04). Если у Вас Windows 7 или 8, а раньше Вы с ними (языками) не работали то их предварительно необходимо скачать и установить.
Примечание: перед началом работы желательно запускать Atom под root.
опыт показывает — работает стабильнее
Linter
Идеология Atom к подсветке в том, что основным пакетом для работы с синтаксисом и его анализа будет Linter, который является верхним уровнем в API для других линтеров кода. Это сделано для прекращения «войны между плагинами» (The idea is to stop the linter plugins war, by providing a top level API for linters to parse and display errors in the Atom editor). Тем не менее, не все сторонние разработчики придерживаются этой идеологии и пишут свои плагины.
Пакет Script: запуск программ из Atom
Script — пакет для запуска кода в atom.
Установка пакета Script, возможна из командной строки:
или меню
Packages->Settings View->Install->Packages
Каждый язык работает, при наличии предварительно установленного компилятора / интерпритатора.
Пакет Script обновляется довольно часто. Например поддержка Swift появилась менее двух недель назад. Так что скорее всего в ближайшее время появится поддержка новых языков.
Для запуска программы необходимо выбрать
Packages—>Script—>Run
Дополнительные опции можно найти в документации либо на страницах Atom`а или проекта.
Для функционирования должен быть создан рабочий каталог.
Путь к нему нужно прописать здесь:
Packages—>Script—>Configure Script—>Current Working Directory
Заявку разработчикам на поддержку нового языка можно оставить здесь (отвечают быстро)
И немного юмора от разработчиков пакета Script,
у которых, судя по всему, спрашивают всё на свете:
первод: Атом не может найти Нод | Руби | Питон | Мои носки
Python
Поддержка подсветки этого языка идёт изначально. Пакеты для работы с синтаксисом и отладки:
Linter + Language Python + Linter Python Pep8 + Script
Script запускает код на Python, а Linter и Linter Python Pep8 покажут синтаксические ошибки.
Возможно Вам, для работы с Python также поможет Atom Python Debugger.
Подсветка ошибок и запуск после установки будут выглядеть так:
Swift
Терминал
Для запуска исполняемого кода С, C++, Java иногда проще использовать сторонний пакет (не пакет Atom, а пакет вашего дистрибутива), который запускается через терминал, поскольку сам Atom поддерживает большое количество языков. Если Atom выступает в качестве редактора кода, a терминал рядом запускает его — это очень удобно для нас, поскольку терминал не имеет такое преимущество редактирования, как Atom.
Для запуска терминала в окне Atom установите пакет Term. Для запуска терминала в окне Atom выбрать
Packages—>Command Palette—>Toggle и Term
с нужными параметрами.
В заключении ещё один интересный кликабельный анимационный gif от разработчиков script, ссылки.
Вызов Python в PHP
У меня есть скрипт Python, который я недавно написал и который я вызываю с помощью командной строки с некоторыми опциями. Теперь я хочу, чтобы очень тонкий веб-интерфейс вызывал этот скрипт локально на моем Mac.
Я не хочу проходить через мелкие проблемы с установкой mod_python или mod_wsgi на моем Mac, поэтому я просто собирался сделать system () или popen () из PHP для вызова скрипта Python.
Есть идеи получше? Заранее спасибо!
9 ответов
В зависимости от того, что вы делаете, system () или popen () может быть идеальным. Используйте system (), если скрипт Python не имеет выходных данных, или если вы хотите, чтобы выходные данные скрипта Python передавались непосредственно в браузер. Используйте popen (), если вы хотите записать данные в стандартный ввод скрипта Python или прочитать данные из стандартного вывода скрипта Python в php. popen () позволит вам только читать или писать, но не обоим. Если вы хотите и то и другое, ознакомьтесь с proc_open (), но с При двусторонней связи между программами нужно быть осторожным, чтобы избежать взаимных блокировок, когда каждая программа ждет, пока другая что-то сделает.
Если вы хотите передать данные, предоставленные пользователем, в скрипт Python, то следует обратить особое внимание на внедрение команд. Если вы не будете осторожны, ваш пользователь может отправить вам данные типа «; evilcommand;» и заставить вашу программу выполнять произвольные команды против вашей воли.
escapeshellarg () и escapeshellcmd () может помочь с этим, но лично мне нравится удалять все, что не является хорошим персонажем, используя что-то подобно
Ваш call_python_file.php должен выглядеть так:
Это выполняет скрипт Python и выводит результат в браузер. В то время как в вашем скрипте Python переменная (sys.argv [1:]) будет вводить все ваши аргументы. Чтобы отобразить argv в виде строки, из которой вытягивает ваш php, так что если вы хотите сделать текстовую область:
Оператор обратной цитаты также позволит вам запускать скрипты Python, используя синтаксис, аналогичный приведенному выше.
В файле python с именем python.py:
В php-файле с именем python.php:
Я делаю такие вещи все время для быстрых и грязных сценариев. Весьма распространено иметь скрипт CGI или PHP, который просто использует system / popen для вызова какой-то внешней программы.
Просто будьте особенно осторожны, если ваш веб-сервер открыт для Интернета в целом. В этом случае обязательно очистите вход GET / POST, чтобы злоумышленники не могли запускать произвольные команды на вашем компьютере.
Вышеуказанные методы кажутся сложными. Используйте мой метод в качестве ссылки.
У меня есть два файла
Здесь я создал HTML-страницу, которая содержит кнопку GO. Всякий раз, когда вы нажимаете эту кнопку, в каталоге, путь которого вы указали, будет создана новая папка.
Если вы хотите выполнить свой скрипт Python на PHP, необходимо выполнить эту команду в вашем PHP-скрипте:
Вы можете запустить скрипт Python через php и выводить данные в браузере.
По сути, вы должны вызывать скрипт python следующим образом:
Запуск скрипта Python из PHP
Я пытаюсь запустить сценарий Python из PHP, используя следующую команду:
exec(‘/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2’);
Однако PHP просто не производит никакого вывода. Для отчетов об ошибках установлено значение E_ALL, а display_errors включен.
Вот что я пробовал:
Однако, если я убегу
он отлично работает, но shutdown now ничего не делает.
PHP имеет разрешения на доступ к файлу и его выполнение.
РЕДАКТИРОВАТЬ: Благодаря Алехандро я смог решить проблему. Если у вас такая же проблема, не забывайте, что ваш веб-сервер, вероятно / надеюсь, не работает от имени пользователя root. Попробуйте войти в систему как пользователь вашего веб-сервера или пользователь с аналогичными разрешениями и попробуйте выполнить команды самостоятельно.
Протестировано на Ubuntu Server 10.04. Надеюсь, это поможет вам и в Arch Linux.
Выполнить команду через оболочку и вернуть полный вывод в виде строки.
Он возвращает результат выполненной команды или NULL, если произошла ошибка или команда не выдает никаких выходных данных.
В файле Python test.py проверьте этот текст в первой строке: (см. Объяснение Shebang) :
Просто напоминание для тех, кто пытается использовать shell_exec на платформе типа unix и не может заставить его работать. PHP выполняется в системе в качестве веб-пользователя (обычно www для Apache), поэтому вам необходимо убедиться, что веб-пользователь имеет права на любые файлы или каталоги, которые вы пытаетесь использовать в команде shell_exec. В противном случае, похоже, он ничего не сделает.
Запуск скрипта Python из PHP
Я пытаюсь запустить сценарий Python из PHP, используя следующую команду:
exec(‘/usr/bin/python2.7 /srv/http/assets/py/switch.py arg1 arg2’);
Однако PHP просто не производит никакого результата. Отчет об ошибках установлен в E_ALL, а display_errors включен.
Вот что я попробовал:
Однако, если я выполню
он прекрасно работает, в то время как shutdown now ничего не делает.
PHP имеет права доступа к файлу и его выполнения.
EDIT: благодаря Алехандро я смог решить эту проблему. Если у вас такая же проблема, не забывайте, что ваш webserver, вероятно/надеюсь, не работает от имени root. Попробуйте войти в систему как пользователь вашего webserver или пользователь с аналогичными разрешениями и попробуйте выполнить команды самостоятельно.
9 ответов
запуск скрипта python из ArcMap ESRI и вызов другого скрипта python (или, по крайней мере, попытка его вызова) с помощью модуля подпроцесса. Однако системное окно, в котором он выполняется (окно DOS), появляется только очень кратко и достаточно для меня, чтобы увидеть ошибку, но уходит слишком.
Мне нужно продолжать запускать скрипт PHP, но у меня есть проблема, в настоящее время я использую putty для входа на сервер, а затем выполняю код PHP. Когда я закрываю сеанс putty, скрипт останавливает выполнение. Шаги: войдите на сервер с помощью putty запуск скрипта PHP (например) PHP имя файла.
Проверено на Ubuntu сервере 10.04. Я надеюсь, что это поможет вам и в Arch Linux.
Выполните команду через shell и верните полный вывод в виде строки.
Он возвращает выходные данные выполненной команды или NULL, если произошла ошибка или команда не выдает выходных данных.
В файле Python test.py проверьте этот текст в первой строке: (см. shebang explain) :
Просто краткое напоминание для тех, кто пытается использовать shell_exec на платформа типа unix и, похоже, не может заставить ее работать. PHP выполняется как веб-пользователь в системе (обычно www для Apache), поэтому вам необходимо убедиться, что у веб-пользователя есть права на любые файлы или каталоги, которые вы пытаетесь использовать в команде shell_exec. С другой стороны, похоже, что он ничего не делает.
Я рекомендую использовать passthru и обрабатывать выходной буфер напрямую:
У меня есть две машины: 192.168.10.6 (локальная машина), которая имеет мой сценарий php, и 192.168.12.163 (удаленная машина), которая имеет мой сценарий python. Как я могу запустить этот удаленный сценарий python из локального сценария PHP? У меня есть рабочий код для запуска локального скрипта.
файл sudoers: sudo visudo
добавлено исключение: www-data ALL=(ALL) NOPASSWD: ALL
Чтобы уточнить, какую команду использовать в зависимости от ситуации
Мой файл test.py выглядит так. Обратите внимание на другую версию Python:
С php я теперь делаю это:
И вы должны увидеть: Привет, Мир!
Вышеперечисленные методы кажутся сложными. Используйте мой метод в качестве ссылки.
У меня есть эти два файла:
run.php
mkdir.py
run.php
mkdir.py
Это так тривиально, но я просто хотел помочь всем, кто уже последовал предложению Алехандро, но столкнулся с этой ошибкой:
Если кто-то столкнулся с этой ошибкой, то Алехандро необходимо внести небольшое изменение в файл php: