我正在使用Perl编写一个CGI程序,根据此处将输入传递给Gnuplot:
how to call a gnuplot script from perl
首先,我通过编写.gnu文件并在bash终端中使用gnuplot执行它来测试我的所有gnuplot绘图例程。我尝试了许多不同的gnuplot终端和相应的输出格式(“set terminal ...,set output ...”),这总是有效。
其次,在执行第一次测试之后,我尝试将.gnu文件中的相同“字符串”(粗略地说)从perl脚本传递到gnuplot。我已多次检查以确保该字符串已正确转义字符。这适用于epslatex终端,但它不适用于png,gif,pdf,jpeg,cairolatex或pdfcairo终端,尽管所有这些终端类型都适用于我的第一个测试用例。我的意思是“不起作用”是在Perl CGI中使用这些终端会生成一个输出名称的文件,但它的大小为0kB。
我怀疑冲洗管道可能有问题,类似于:
Why doesn't my parent process see the child's output until it exits?
但是在用gnuplot传送的字符串末尾添加一个换行符,然后打开autoflush($ | = 1)并没有解决问题。
我很难过。知道可能会发生什么吗?
编辑:以下是示例代码:
工作:
open my $GP, '|-', 'gnuplot';
my $GPoutput = "set xrange [-5:5]
set terminal epslatex
set output \"graph1.tex\
plot sin(x)";
$|=1;
print $GP "$GPoutput";
不起作用:
open my $GP, '|-', 'gnuplot';
my $GPoutput = "set xrange [-5:5]
set terminal cairolatex
set output \"graph1.tex\
plot sin(x)";
$|=1;
print $GP "$GPoutput";
虽然如果我将$ GPoutput的字符串放入.gnu文件并从命令行执行gnuplot,它确实有效,并且在gnuplot上运行“set terminal”表明cairolatex是一个有效的终端。
答案 0 :(得分:0)
你可能想尝试CPAN module,我碰巧知道它比你想象的更难。
我熟悉的是PDL (The Perl Data Language)的PDL::Graphics::Gnuplot扩展名。