我使用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是有效的終端。
請問你能發表一些代碼來證明問題嗎? – 2013-02-05 10:46:06