HTML и Perl, возвращая текст сценария вместо запуска - PullRequest
0 голосов
/ 04 января 2012

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

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

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

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

<form action="scripts/do_processing.pl" method="get">
<table>
<td>Select input file: (must be fasta format)</td>
<td>
<input type="file" name="first_name" value="" maxlength="100" />
</td>
</tr>
<br>
<tr>
<tr><td>Binning:</td>
<td>
<input type="radio" name="bin_method" value="blastn" /> Blastn
<input type="radio" name="bin_method" value="blastx" /> Blastx
<input type="radio" name="bin_method" value="megan" /> Megan
</td>
</tr>
</table>
<br><br>
<input  TYPE=IMAGE 
        SRC="images/go_button-green.jpg" 
        HEIGHT=100 WIDTH=auto
        ALT="Go!" BORDER=0 
        NAME="go"
        >
</td>
</tr>
</form><br>

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

Примечание: В данный момент ввод не актуален, так как скрипт на Perl, который я сейчас пытаюсь вызвать, просто"Привет, мир!"

Ответы [ 3 ]

4 голосов
/ 04 января 2012

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

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

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

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

1 голос
/ 05 января 2012

Как уже упоминали другие, вам нужен какой-то сервер, чтобы действовать как связующее звено между браузером и 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 не идеально (и при этом это не сделано), но это могло бы быть хорошо подходит для вашей проблемы.Скорое обновление до XUL::Gui (частью которого является Web::Gui).Он будет улучшать Web::Gui с поддержкой jQuery, jQueryUI и некоторым улучшенным синтаксисом (помимо всего прочего устраняется необходимость в тегах SPAN в приведенном выше примере).Я надеюсь, что это обновление будет опубликовано в течение месяца (как только я смогу переписать свой новый асинхронный сервер передачи с продолжением без сбоев:)

1 голос
/ 04 января 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...