我正在使用 Perl 编写一个 CGI 程序,将输入通过管道传输到 Gnuplot,如下所示:
首先,我通过编写一个 .gnu 文件并在 bash 终端中使用 gnuplot 执行它来测试我所有的 gnuplot 绘图例程。我已经尝试了许多具有相应输出格式的不同 gnuplot 终端(“设置终端...,设置输出...”),这总是有效的。
其次,在执行了第一个测试之后,我尝试将相同的“字符串”(粗略地说)从 .gnu 文件传递到 perl 脚本中的 gnuplot。我已经检查了很多次以确保字符串具有正确转义的字符。这适用于 epslatex 终端,但不适用于 png、gif、pdf、jpeg、cairolatex 或 pdfcairo 终端,尽管所有这些终端类型在我的第一个测试用例中都有效。我所说的“不起作用”的意思是在 Perl CGI 中使用这些终端会生成一个输出名称的文件,但它的大小为 0kB。
我怀疑冲洗管道可能有问题,类似于:
但是在通过管道传输到 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 上运行“设置终端”表明 cairolatex 是一个有效的终端。