我尝试使用CPAN Tk::ExecuteCommand
模块中的代码段来实现上述功能,但是当我在$ec->configure(-command
部分执行任何Perl程序时,它会给出以下错误。
此外,Perl作业完成后,窗口将意外关闭。如果我只是在条目中打印文本而不是命令(如我注释掉的行),脚本可以工作并且不会被关闭。我选择使用这个Cpan程序,因为我想要两件事:
这是我得到的错误信息:
> /usr/bin/perl: symbol lookup error: /usr/pkgs/perl/5.14.1/lib64/module/default/x86_64-linux/auto/Proc/ProcessTable/ProcessTable.so: undefined symbol: pthread_once
[13]退出127 test1.pl
以下是我使用的代码:
#!/usr/bin/perl
use Tk;
use Tk::ExecuteCommand;
$ec = tkinit()->ExecuteCommand(
-command => '',
-entryWidth => 50,
-height => 10,
-label => '',
-text => 'Execute',
)->pack;
$ec->configure(-command => 'perl ./my_script.pl -wrapper wrapper_txt');
#$ec->configure(-command => 'Text line only');
$ec->execute_command;
$ec->update;
MainLoop;
答案 0 :(得分:2)
将$ec->configure(-command => 'perl ./my_script.pl -wrapper wrapper_txt');
更改为$ec->configure(-command => 'perl my_script.pl -wrapper wrapper_txt');
并获取状态使用下面的子
sub sys {
# Execute a command asynchronously and return its status and output.
my $cmd = shift;
$ec->configure( -command => $cmd );
my $t = $ec->Subwidget( 'text' ); # ROText widget
$t->delete( '1.0' => 'end' );
$ec->execute_command;
return ($ec->get_status)[0], split /\n/, $t->get( '1.0' => 'end -1 chars' );
} # end sys
要使用按钮杀死它,请查看文档,
这个ExecuteCommand mega小部件由一个LabEntry小部件组成 命令条目,启动命令执行的“执行”按钮,和 收集命令执行输出的ROText小部件。虽然 命令正在执行,“Do It”按钮变为“Cancel”按钮 可以过早地杀死执行命令。 kill_command 方法以编程方式执行相同的操作。
因此,您需要$exec->execute_command;
$exec->get_status;
和$exec->kill_command;
。
编辑:看起来像known issue,尝试使用最新版本的Proc :: ProcessTable。