Html и perl, возвращая текст скрипта вместо запуска

Я писал html-интерфейс для отображения таблиц, круговых диаграмм, данных и т.д.

Скрипт Perl, который генерирует данные и таблицы, может вызываться одной командой на терминале, и я хочу, чтобы в html была кнопка, которая будет вызывать это. Мне действительно не нужна обратная связь с Perl-скриптом, если это произойдет, хотя если бы он мог отбросить "все пошло лучше, чем ожидалось", это было бы хорошо.

В настоящее время, однако, каждый раз, когда я нажимаю кнопку "Отправить", мне предлагается открыть или сохранить скрипт Perl, и после дня поиска в Интернете я не могу исправить это и буду признателен за некоторые советы.

Я новичок в html и js, но это то, что у меня есть до сих пор:

<form action="scripts/do_processing.pl" method="get">
<table>
<tbody><tr><td>Select input file: (must be fasta format)</td>

</tr>

<tr><td>Binning:</td>
<td>
 Blastn
 Blastx
 Megan
</td>
</tr>
</tbody></table>



</form>

Его нужно проводить только локально, у меня нет намерений сделать его доступным для внешнего мира, и поэтому я избегаю решений CGI и Apache-esque, которые, я думаю, не нужны. Ссылки все хороши, поскольку он пытается открыть файл каждый раз.

Примечание. В настоящий момент вход не имеет значения, поскольку скрипт perl, который я сейчас пытаюсь вызвать, - это просто "Hello World!".

3 ответа

К тому, что вы делаете, вам нужно использовать веб-сервер, к сожалению.

В вашем случае, когда вы открываете файл HTML локально, когда вы нажимаете на форму, ваш браузер просматривает действие и переходит к этому "адресу" в зависимости от того, где находится ваша веб-страница, поскольку вы являетесь локальным, ваша веб-страница является файлом ://url, поэтому он в основном переходит к вашему файлу perl (что вам нужно), за исключением того, что сам браузер просто запрашивает файл из вашей файловой системы и не знает, что с ним делать, файловая система НЕ запускает ваш скрипт perl, он просто служит файлу. Таким образом, только положительный ответ - предложить вам его загрузить.

В контексте веб-службы, когда вы сообщаете серверу "переходите к этому файлу perl" и, предположив, что веб-сервер настроен правильно, веб-сервер замечает, что.pl является специальным файлом, и он должен запускать его, поэтому он делает, а затем захватывает свой вывод и отправляет его в ваш браузер. Это то, что вы хотите сделать.

Надеюсь это поможет.


Как отмечали другие, вам нужен какой-то сервер, который будет действовать как клей между браузером и perl. Модуль, который я написал (Web :: Gui), может действовать как этот клей при написании всего HTML и JavaScript для вас:

use Web::Gui;

display(
 TABLE(
 TR(
 TD('Select input file: (must be fasta format)'),
 TD(INPUT type=>"file", id=>"first_name", maxlength=>100)
 ),
 TR(
 TD('Binning:'),
 TD(map BinMethod($_), qw(Blastn Blastx Megan)),
 ),
 TR(TD(colspan => 2,
 INPUT(type=>'button', value=>'Go', onclick=>sub {
 print "running app\n";
 print "file: ", ID(first_name)->value, $/;

 my $radios = gui('document')->getElementsByName('bin_method');
 my @values = map {$_->value} grep {$_->checked} @$radios;
 print "bin: @values\n";
 })
 ))
 )
);

sub BinMethod {
 INPUT(type=>"radio", name=>"bin_method", value=>lc $_[0]),
 SPAN($_[0])
}

Web::Gui не идеален (и не делается), но может быть хорошо подходит для вашей проблемы. Большое обновление <********::Gui (из которого Web::Gui является частью) должно скоро. Это будет усиление Web::Gui с поддержкой jQuery, jQueryUI и некоторым улучшенным синтаксисом (исключая необходимость в тегах SPAN в приведенном выше примере, среди прочего). Я надеюсь, что это обновление опубликовано в течение месяца (как только я смогу получить доступ к новому асинхронному серверу пересылки для продолжения работы без сбоев :)


Чтобы что-то случилось на машине, на которой размещена HTML-страница, вам нужно иметь какой-то процесс, который ищет запросы на порт 80 на эту машину. Во всех случаях это будет своего рода "веб-сервер" просто потому, что порт 80 является стандартным "веб-портом".

Вы можете написать свой собственный простой сервер, который прослушивает запрос и запускает скрипт, но я бы предложил использовать существующий, легкий и простой в настройке.

Другой вариант - сделать то же самое (иметь слушателя), но в другом порту.

licensed under cc by-sa 3.0 with attribution.