我是gnuplot的新手。我正在使用Unix。
我在终端上看到命令/错误及其输出,但我想将它们保存在文件中以便存储。
gnuplot中有一个保存命令,但它只保存模块给出的最后一个绘图或splot命令以及最终设置。
假设我绘制了一条设置为'A'的线,经过一些计算后,我去重新绘制另一条设置为'B'的线
gnuplot.save()命令只保存最后一个命令和最新设置。如何保存所有已发出的命令?
请帮助......
答案 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'命令。