Как использовать STDIN на Perl CGI - PullRequest
0 голосов
/ 24 августа 2010

Я новичок в Perl и хочу использовать экранный ввод в моем скрипте. Вот мой сценарий, и я хочу, чтобы команда IOS вводилась с клавиатуры. Может кто-то показать мне, где я не прав. Проблема, которую я имею сейчас, сценарий не читает мой ввод с клавиатуры, я не уверен, работает ли над моим делом. спасибо !!

# ### Show ######################################################### 
               $cmd = <STDIN>;
                chomp ($cmd);
               $show_error = "";
              if ($ssh_switch eq 'yes') {
                   ssh_access();
               }
               print "\n",h2($host . ' - ' . $cmd);
                @output=$cmd;
                print hr(),"\n";
               }
}
#########################################################################

Ответы [ 3 ]

5 голосов
/ 24 августа 2010

CGI предназначен для приема полного HTTP-запроса, а затем выплевывания полного HTTP-ответа.

Он просто не работает в интерактивном режиме.

Если вы хотите написать скрипт, который ожидает ввода с клавиатуры, не используйте CGI.

2 голосов
/ 24 августа 2010

На самом деле, CGI использует STDIN. Используется для передачи тела запроса POST. Попробуйте этот скрипт

#!/usr/bin/perl
print "Content-Type: text/plain\r\n\r\nYou entered: ";
print while <STDIN>;

и POST некоторые данные, например,

$ echo "Just test" | POST http://localhost/yourscript.pl
You entered: Just test

(POST - это программа из LWP CPAN-дистрибутива)

Таким образом, вы можете направлять свой сценарий с помощью команд, прочитанных из STDIN, хотя он очень небезопасен как есть!

1 голос
/ 24 августа 2010

CGI разрешает ввод через STDIN; попробуйте CGI->new(\*STDIN).

Хотя это может быть не так, как вы хотите вводить вещи. Можете ли вы привести пример того, как выглядит ваш вклад?

Ах, мне кажется, что вы хотите либо:

  1. запустите ваш скрипт из командной строки, например: perl scriptname 'Submit=1&Devices=router1&Devices=router2', а затем предоставьте свои команды Cisco на STDIN (и получите вывод html, что может быть неудобно), или

  2. запустить ваш скрипт в браузере, и в этом случае вам следует заменить использование STDIN входным тегом для ввода команд и получить команды из этого именованного параметра

Опять же, я вижу, у вас уже есть входной тег "поиск", вы просто не используете его. Попробуйте заменить <STDIN> на $cgi->param('search') и добавить поиск к проверке «убедитесь, что данные были введены».

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