2013-02-05 29 views
1

我使用Perl编写CGI程序,管道投入的Gnuplot按这里:一些GNUPLOT终端命令行工作,而不是在Perl(管道)调用时

how to call a gnuplot script from perl

首先,我测试我所有的gnuplot绘图程序,方法是编写一个.gnu文件,然后在bash终端中用gnuplot执行它。我已经尝试了许多不同的gnuplot终端,它们具有相应的输出格式(“set terminal ...,set output ...”),并且始终有效。

其次,在执行了第一次测试之后,我尝试从perl脚本中将.gnu文件的相同“字符串”(粗略地说)传递给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,然后自动冲洗打开($ | = 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是有效的终端。

+1

请问你能发表一些代码来证明问题吗? – 2013-02-05 10:46:06

回答

相关问题