Получение вывода по кадру вместо терминала (Perl-Tk)
#!/usr/local/bin/perl
use Tk;
# Main Window
$mw = new MainWindow;
$label = $mw -> Label(-text=>"Hello folks") -> pack();
$button = $mw -> Button(-text => "Click here to Flush rules",
-command =>\&flush) -> pack();
MainLoop;
sub flush {
$mw->messageBox(-message=>"Initiating flushing.. click on OK button");
system ("iptables -L");
system ("iptables -F");
system ("iptables -L");
}
Я сделал этот код и что он делает, что когда пользователь нажимает на кнопку, появляется окно сообщения
Затем, когда я нажимаю кнопку ОК, она вызывает подпрограмму flush
и затем вывод выводится на терминал следующим образом:
Я хочу, чтобы оно появилось в том же окне сообщения. Как мне это сделать?
2 ответа
Решение
Я получил ответ на этот вопрос в Perlmonks.
Ссылка на пост в perlmonks is-> http://www.perlmonks.org/index.pl?node_id=920414
#!/usr/bin/perl
use warnings;
use strict;
use Tk;
# Main Window
my $mw = new MainWindow;
$mw->geometry('+100+100');
my $label = $mw -> Label(-text=>"Hello folks") -> pack();
my $button = $mw -> Button(-text => "Click here to Flush rules",
-command =>\&flush) -> pack();
MainLoop;
sub flush {
$mw->messageBox(-message=>"Initiating flushing.. click on OK button");
# the script hangs here, until the messagebox OK button is pressed.
my $text = $mw->Scrolled('Text')->pack();
#my $out1 = `iptables -L`;
my $out1 = `ls -la`;
$text->insert('end',"$out1\n");
$text->see('end');
#my $out2 = `iptables -F`;
my $out2 = `dir`;
$text->insert('end',"$out2\n");
$text->see('end');
#my $out3 = `iptables -L`;
my $out3 = `ps auxww`;
$text->insert('end',"$out3\n");
$text->see('end');
}