2013-02-05 118 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

回答

相關問題