我正在尝试使用Perl和
Chart::Gnuplot
用于Linux的模块代表一系列数据。它是这样的:
use strict;
use warnings;
use Chart::Gnuplot;
die "Linux check" if ( $^O ne 'linux' );
my $chart = Chart::Gnuplot->new(
terminal => 'x11',
title => {
text => "GRAPH",
font => "Arial, 20"
},
xlabel => {
text => "X AXIS",
font => "arial, 20",
offset =>"0,-1"
},
ylabel => {
text => "Y AXIS",
font => "arial, 20",
offset =>"-6,0"
},
);
my $dataSet = Chart::Gnuplot::DataSet->new(
xdata => \@x_data,
ydata => \@y_data,
style => "points",
);
$chart->plot2d($dataSet);
exit;
当我从Eclipse运行它时,脚本工作正常并且图形显示正确,但该过程不会终止(关闭Gnuplot窗口将不起作用)。当我在终端上运行它时会发生类似的事情。
有问题的行是$chart->plot2d($dataSet)
,没有它,它可以正确终止。关闭窗户后我该怎么做才能结束它?
答案 0 :(得分:3)
Chart::Gnuplot
运行gnuplot
,同时打开stdin和其他文件描述符。绘制图片后,gnuplot
读取stdin等待更多命令。
一种解决方案是在执行绘图之前简单地将stdin重定向到perl程序中的/dev/null
。这也会使图像立即显示和消失,因此您还应添加persist
选项。以下是要更改的两行:
my $chart = Chart::Gnuplot->new(
terminal => 'x11 persist',
...
open(STDIN, "<", "/dev/null") or die "Can't open /dev/null: $!";
$chart->plot2d($dataSet);