我是 gnuplot 的新手。我正在使用 Unix。
我在终端上看到了命令/错误及其输出,但我也想将它们保存在文件中以用于存储目的。
gnuplot 中有一个保存命令,但它只保存模块给出的最后一个绘图或 splot 命令和最终设置。
假设我绘制了一条设置为“A”的线,在做了一些计算后,我去重新绘制了另一条设置为“B”的线
gnuplot.save() 命令只会保存最后一个命令和最新的设置。如何保存所有发出的命令?
请帮助...
我对 gnuplot-py 不是很熟悉——但如果它在执行命令时将命令写入终端,则可以使用 shell 重定向:
python myPythonScriptWithGnuplot.py > commandfile.gp #redirect stdout
python myPythonScriptWithGnuplot.py 2> commandfile.gp #redirect stderr
当然,如果您从 python 向终端写入其他内容,这将无济于事......
但请注意,gnuplot-py 通过临时 FIFO 将数据发送到 gnuplot(我认为无论如何)。因此,如果您正在绘制数据(例如列表、numpy 数组等......不是类似的函数"sin(x)"
),当您尝试绘制数据时,FIFO 将从您的系统中清除,并且您的 plot 命令将失败并抱怨它可以'找不到数据文件。
编辑
在(快速)查看源代码后,您似乎有几个选择。您的第一个选择:传递debug=1
给构造函数(您可能已经这样做了)。这将导致将命令写入标准错误。使用少量(或大量)shell 魔法,您可以分离出不同的输出流。这是一个将命令中的 stderr 放入文件中的方法,同时仍将输出留在在 bash 中工作的终端上(我使用的是 bash 4.1.5——但我很确定这已经存在了一段时间):
((command 3>&1 1>&2 2>&3 ) | tee command_stderr.log ) 3>&1 1>&2 2>&3
#swap stderr/out
#tee puts data in output file and to terminal
#swap stderr/stdout again.
(如果有人知道的话,我很想看到一种更简洁的方式来交换这个输出流......)
或者,您可以将文件名传递给Gnuplot
构造函数。这会将命令写入该文件。据我所知,没有任何方法可以让您将命令写入文件和 gnuplot 管道。但是,您始终可以启动多个Gnuplot
实例并通过主实例将命令写入文件,然后每当您编写绘图命令时,告诉第二个实例到load "filename"
. 当然,如果你使用这种方法,你可能应该指定数据应该是inline
d。
第三种选择是放弃 gnuplot-py 转而使用 pyGnuplot,因为我仍在积极开发那个 - 如果某些东西不起作用,或者您想添加一个功能,您可以告诉我; )
非 python 的答案是使用“脚本”命令。