保存由Gnuplot-py包发送到gnuplot程序的命令

时间:2012-05-21 17:32:11

标签: python gnuplot

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

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

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

假设我绘制了一条设置为'A'的线,经过一些计算后,我去重新绘制另一条设置为'B'的线

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

请帮助......

2 个答案:

答案 0 :(得分: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将从您的系统和绘图命令中清除将失败抱怨它无法找到数据文件。

修改

在(快速)查看源代码后,您会看到一些选项。您的第一个选择:将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,因为我还在积极开发那个 - 然后如果某些东西不起作用,或者你想要添加一个功能,你可以放弃我知道;)

答案 1 :(得分:0)

非python答案是使用`script'命令。