Perl 如何关闭Gnu进程?
我正在尝试使用Perl和 用于Linux表示一系列数据的模块。是这样的:Perl 如何关闭Gnu进程?,perl,gnuplot,Perl,Gnuplot,我正在尝试使用Perl和 用于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
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)
,如果没有它,它可以正确终止。关上窗户后我该怎么做才能结束它 Chart::Gnuplot
运行Gnuplot
,同时打开相同的stdin和其他文件描述符。画完图后,gnuplot
读取stdin,等待更多命令
一种解决方案是在进行绘图之前,在perl程序中将stdin重定向到/dev/null
。这也会使图像立即出现和消失,因此您还应该添加持久化
选项。以下是要更改的两行:
my $chart = Chart::Gnuplot->new(
terminal => 'x11 persist',
...
open(STDIN, "<", "/dev/null") or die "Can't open /dev/null: $!";
$chart->plot2d($dataSet);
my$chart=chart::Gnuplot->new(
终端=>'x11持久化',
...
open(STDIN,“可能是相关的,plot2d()
命令似乎正在等待EOF字符。请尝试在终端窗口中按CTRL-D。我认为打印后它在终端中等待命令的原因是您指定了terminal=>'x11'
选项。如果删除该选项并指定output=>”test.png“
相反,它将保存到一个文件中,而不是在终端中等待进一步的命令,这两种方法都有效,但我希望脚本尽可能干净(我不想每次都按CTRL-D)并使用鼠标交互选项,因此.png输出没有足够的关闭STDIN
(或者任何其他标准句柄(STDOUT
,STDERR
)都是一个非常非常糟糕的主意。打开的下一个文件(可能在某些模块中隐式向下调用堆栈15级)将获得文件描述符0,任何从STDIN
读取的人都将看到“有趣”的输入。更好的是:open STDIN,”谢谢你们!这完全符合我的要求,现在脚本不用等待命令就结束了