Отправка вывода сценария Perl из командной строки в браузер через mod_perl - PullRequest
0 голосов
/ 08 октября 2009

У меня есть простой Perl-скрипт, который можно запустить из командной строки через perl -w test.pl.Затем у меня есть скрипт mod_perl2, к которому можно получить доступ из веб-браузера.Я хочу, чтобы последний вызывал первый и отправлял вывод в браузер, сбрасывая по ходу работы.

Скрипт mp2 не имеет строки shebang, потому что это mod_perl, поэтому он не знает, гдеperl жизней.Кроме того, вызов system('perl -w c:\\path\\to\\test.pl') приводит к ошибке:

    'perl' is not recognized as an internal or external command,
    operable program or batch file.

по какой-то причине я не могу понять, так как это в моей переменной пути.Может быть, не для учетной записи, под которой работает Apache.

Есть ли какой-нибудь способ запустить скрипт и перехватить его вывод, не вызывая исполняемый файл perl через system()?То есть что-то, что использует уже загруженный интерпретатор?

Ответы [ 5 ]

1 голос
/ 09 октября 2009

Помимо проблемы mod_perl, местоположение текущего интерпретатора perl находится в $^X. Если вы не используете mod_perl, вы должны найти Perl. Конечно, внутри mod_perl вы, вероятно, не захотите этого, поскольку он встроен в apache.

Некоторые люди упоминают% PATH%, но я рекомендую против этого. Просто найдите полный путь к Perl и используйте его явно, не полагаясь на% PATH%. Если вы жестко запрограммируете это или установите его в конфигурации, решать только вам.

0 голосов
/ 08 октября 2009

Если это Win32 (как показывает ваш тег), вы не можете просто связать расширение .pl с Perl через стандартные вещи Windows (например, взломать реестр или перейти в Сервис> Параметры папки> Типы файлов в окне Проводника)

0 голосов
/ 08 октября 2009

Вам нужно найти, где находится исполняемый файл Perl (в Unix, выполните which perl, в Windows найдите Perl icond и найдите путь к командной строке или найдите каталог, в котором установлен perl - например, "c: \ program" файлы \ myPerlDistro \ Bin \ perl.exe "

Затем вам нужно либо явно добавить этот полный путь к вашему вызову qx// (не использовать систему, поскольку он теряет вывод), либо добавить этот путь в переменную PATH Apache.

Второй вариант - использовать EmbPerl - он имеет директиву Execute, которая выполняет на месте другие скрипты и включает их вывод - в том же интерпретаторе. Работает под mod_perl.

0 голосов
/ 08 октября 2009

Очевидно, что проблема в том, что %PATH% учетной записи, под которой работает httpd, не включает путь к perl. Вы можете установить это в httpd.conf, используя PerlSetEnv .

0 голосов
/ 08 октября 2009
do "/path/to/test.pl";

или

require "/path/to/test.pl";

загрузит и оценит содержимое файла.

Одно замечание по поводу require заключается в том, что при оценке файла должно возвращаться значение "true". Обычный способ сделать это - поставить "1;" в конце вашего скрипта.

...