从Fortran调用Gnuplot时如何抑制终端冗余输出?
如何抑制Fortran调用gnuplot时的终端输出
我之前也碰到过一模一样的问题!当从Fortran里调用gnuplot生成EPS图时,默认情况下gnuplot会把PostScript的原始内容直接打印到终端,密密麻麻的输出直接淹没了编译错误信息,排查问题特别头疼,尤其是多次调用gnuplot脚本的时候。
这里有两种靠谱的解决办法,你可以根据自己的情况选:
方法一:在system调用中重定向输出
最简单的方式就是在调用gnuplot的命令里,把标准输出和错误输出都重定向到“黑洞”设备,让这些无用内容直接消失。
修改Fortran里的system调用:
call system('gnuplot heun_ode_solution_10_comparison.gnu > /dev/null 2>&1')
> /dev/null:把命令的标准输出(就是那些PS内容)扔到Linux/macOS的空设备里2>&1:把错误输出也重定向到和标准输出一样的地方,确保连无关的错误提示也不会乱跳出来
如果你是在Windows环境下编译运行,把/dev/null换成NUL就行:
call system('gnuplot heun_ode_solution_10_comparison.gnu > NUL 2>&1')
方法二:调整gnuplot脚本的命令顺序
从根源上解决问题的方式是修改你的.gnu脚本,确保gnuplot一开始就知道要把输出写入文件,而不是打印到终端。
你原来的脚本里先执行了set term postscript然后plot,这时候还没指定输出文件,所以gnuplot会把PS内容直接输出到终端,之后才设置set output再replot。调整顺序,先指定终端类型和输出文件,再做绘图设置:
#====================================== # 先设置终端类型和输出文件 set term postscript eps enhanced "Helvetica" 26 set output 'heun_ode_solution_10_comparison.eps' # 然后做其他绘图配置 unset key unset grid set title "Heun's ODE solver for 10 data samples" font "Helvetica Bold, 24" set xlabel "x" font "Helvetica Bold, 24" set ylabel "y" font "Helvetica Bold, 24" set xrange[0:4] set yrange[0:80] set xtics 0, 1, 4 set ytics 0, 15, 75 # 最后绘图 plot "Heun_Solution_10.dat" using 1:3 smooth csplines lc rgb 'blue' lw 6 title "True", \ "Heun_Solution_10.dat" using 1:2 smooth csplines lc rgb 'red' lw 3 title "Heun" set key top left replot #======================================
这样调整后,gnuplot会直接把绘图内容写入指定的EPS文件,不会再往终端输出任何PS内容,终端会保持干净。
两种方法的对比
- 方法一:无需修改gnuplot脚本,几秒钟就能改好,适合临时快速解决问题
- 方法二:更规范,从逻辑上避免了终端输出的产生,推荐作为长期解决方案
试试看这两种方法,应该能彻底解决你的终端被刷屏的问题,以后看编译错误信息就轻松多了!
内容的提问来源于stack exchange,提问作者vikash
相关产品推荐
相关产品推荐

