- 论坛徽章:
- 0
|
- #!/usr/bin/perl
- use warnings;
- use strict;
- use Tk;
- BEGIN {
- if ($^O eq 'MSWin32'){
- require Win32::Console;
- Win32::Console::Free();
- }
- }
- $|++;
- open(SP,'>stdout.txt');
- *STDOUT = *SP;
- *STDERR = *SP;
- open TP,"-|","netstat -an";
- my $mw = MainWindow->new;
- my $text = $mw->Text(-width => 45, -height => 35, -font => "r11")->pack;
- $mw->Button(-text => "Close", -command => sub { exit })->pack;
- $mw->repeat(1000 => \&run);
- MainLoop;
- sub run {
- $mw->update;
- my $line = <TP>;
- if ($line){
- $text->insert('end',$line);
- }
- }
复制代码
- #代码1
- BEGIN {
- if ($^O eq 'MSWin32'){
- require Win32::Console;
- Win32::Console::Free();
- }
- }
- 这部分,是flw版版在perlchina提到的一个用来关闭运行窗口的方法
复制代码
- #代码2
- open(SP,'>stdout.txt');
- *STDOUT = *SP;
- *STDERR = *SP;
- open TP,"-|","netstat -an";
- 这部分,是我要打开操作的管道,由于运行窗口已经关闭了,所以把标准输出和标准错误都重定向到文件
复制代码
现在的问题是,只要我用了代码1,那么代码2里面的就不好使了,看错误文件可以发现有下面的错误信息
readline() on closed filehandle TP at r:\startit.pl line 30.
而如果不全代码1,则代码2工作正常
所以,在想,这两者之间应该有某种关系,或,应该有某种方法可以既使用代码1,也能让代码2正常工作
苦于,资料不全,用google找Win32::Console 或 管道 相关的全部是风牛马不相及的东西
所以,请各位有识之士指点一二,如果哪里写错了,请告知错误原因 |
|