0

我是 gnuplot 的新手。我正在使用 Unix。

我在终端上看到了命令/错误及其输出,但我也想将它们保存在文件中以用于存储目的。

gnuplot 中有一个保存命令,但它只保存模块给出的最后一个绘图或 splot 命令和最终设置。

假设我绘制了一条设置为“A”的线,在做了一些计算后,我去重新绘制了另一条设置为“B”的线

gnuplot.save() 命令只会保存最后一个命令和最新的设置。如何保存所有发出的命令?

请帮助...

4

2 回答 2

1

我对 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". 当然,如果你使用这种方法,你可能应该指定数据应该是inlined。

第三种选择是放弃 gnuplot-py 转而使用 pyGnuplot,因为我仍在积极开发那个 - 如果某些东西不起作用,或者您想添加一个功能,您可以告诉我; )

于 2012-05-21T17:52:54.580 回答
0

非 python 的答案是使用“脚本”命令。

于 2012-05-21T17:52:37.937 回答