1
我已成功运行Perl中的Tk GUI(Tkx模块)的外部命令,而不会阻止GUI。在使用tkx :: open的同时检索stdout和stderr以运行外部命令
但是,我很难从stderr和stdout中检索消息:对于大多数命令,没有任何内容存储在变量$stdout
和$stderr
中。
我在代码中缺少什么?
感谢
use Tkx;
use strict;
use Data::Dumper;
my ($stdout,$stderr);
my $mw = Tkx::widget->new(".");
my $button=$mw->new_ttk__button(-text => "Run", -command => [\&run_command, "systeminfo"]);
$button->g_grid(-column => 0, -row => 0);
my $text = $mw->new_tk__text(-width => 32, -height => 16);
$text->insert("end", "Test\n");
$text->g_grid(-column => 0, -row => 1);
Tkx::MainLoop();
print "STDOUT: $stdout\n\n","-"x24,"\nSTDERR: $stderr\n";
sub run_command {
my $cmd = shift;
my $fh = Tkx::open("| $cmd", 'r') or die "$!";
Tkx::fconfigure($fh, -blocking => 0);
$stdout.=Tkx::read($fh);
eval { Tkx::close($fh); };
[email protected] if ([email protected]);
}
谢谢,这是一个非常有趣的建议。你会有另一种方法或一种方法来实现它不会阻止Tk GUI?谢谢 –
@ Jean-FrancoisT。看到我更新的答案.. –