0
#!/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");
}

このコードを作成しました。ユーザーがボタンをクリックすると、メッセージ ボックスが表示されます。

ここに画像の説明を入力

次に、[OK] ボタンをクリックすると、サブルーチンが呼び出さflushれ、出力が次のように端末に表示されます。

ここに画像の説明を入力

同じメッセージボックスに表示したい。どうすればいいですか?

4

2 に答える 2

1

  • システムを使用しない
  • STDOUT/STDERR をキャプチャ ( qx, IPC::System::Simple, IPC::Run...)
  • ラベルを更新します ($textvariable を更新するのと同じくらい簡単です...例として Tk デモ プログラム ウィジェットを参照してください)

  • 于 2011-08-13T20:46:55.380 に答える
    0

    この質問の答えは perlmonks にあります。

    perlmonks での投稿のリンクは、-> 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');
    }
    
    于 2011-08-17T14:09:51.990 に答える