LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: onlyclimb

请问如何用脚本控制gnuplot进行实时的plot[未解决]

[复制链接]
 楼主| 发表于 2004-4-12 20:50:51 | 显示全部楼层
最初由 home_king 发表
在下真的没有用过gnuplot,所以无从入手。但解决非交互式问题,就应该使用expect。


可不可以直接用C的linux调用解决这个问题?
expect会不会太酷?
 楼主| 发表于 2004-4-12 23:27:34 | 显示全部楼层
最初由 HuiCai 发表
gnuplot是数据作图用的
做科学研究方面的这个用的很多

强烈建议参考一下expect,尽量让工作自动化,省出时间玩

我的一个自动下载合并数据并画图的脚本
#!/usr/bin/expect
#Li HM lihm0@163.com
set timeout -1
set id [lindex $argv 0]
spawn date +%d-%m-%y-%H-%M
expect
set LDIR [string range $expect_out(buffer) 0 13]
set LDIR "/home/eagle/tmp/sem/$LDIR"
spawn mkdir $LDIR
send "cd $LDIR\r"
log_user 0
spawn ftp sunshine
expect "Name"; send "\r"
expect "ftp>"; send "quote authenticate lihm\r"
expect "password"; send "quote response mypasswd\r"
expect "ASS"; send "user lihm@nfe\r"
expect "assword:"; send "mypasswd\r"
log_user 1
expect "logged"; send "prompt\r"
expect "off"; send "cd $id\r"
expect "succ"; send "lcd $LDIR\r"
expect "now"; send "mget *.gz\r"
expect "complete"; send "bye\r"
#以上取下数据
spawn $env(HOME)/script/semcomb $LDIR #合并处理数据
sleep 5
#调用idl进行数据绘图
cd $env(HOME)/idl
spawn idl
expect "IDL>"; send ".r SEM\r"
expect "IDL>"; send "exit\r"
#绘图完毕,把看图软件调出来,以便检测结果
cd $env(HOME)/data
exec gqview

以上是主程序
下面分程序semcomb
#!/bin/bash
DATAFILE=$HOME/data/tmpdata.dat
rm -f $DATAFILE
cd "$1"
tar zxvf sem.tar.gz
sed -e '/^Start/q' Au?000-*\ 0.dat >$DATAFILE
for j in \  1 2 3 4 5 6 7 8 9
do
    for i in Au?000*$j[0-9].dat
    do
        if [ -f "$i" ]
        then
            sed -f $HOME/script/semdata.sed "$i" >>$DATAFILE
        fi
    done
done
rm -rf Au?000-*.dat

sed脚本semdata.sed
#Script Name: semdata.sed
#combine sem data and delete common head
1,/^Start/d
${
    /.\{42\}/!d
}

本想用expect和tcl完成一个程序,不需要另外的semcomb结果,边学边改,出错太多,放弃。现在倾向于怎么方便怎么算。



我试了一下
我的脚本是
spawn gnuplot
expect "gnuplot>"; send "test\r"

结果没有任何反应。
是不是因为gnuplot 开始的一大堆的介绍文字引起的问题?
 楼主| 发表于 2004-4-12 23:32:07 | 显示全部楼层
顶一下
发表于 2004-4-13 07:38:07 | 显示全部楼层
expect是在上一步中屏幕输出的地方搜索字符串,如果有匹配的才进行下一步,而且可以不同的匹配进行不一样的操作
建议首先看看expect的大体介绍

我的idl启动后:> idl
IDL Version 6.0 (linux x86 m32). (c) 2003, Research Systems, Inc.
Installation number: .
Licensed for use by:

IDL>
所以我可以通过IDL>推断我的IDL正常启动,你得需要换成对应的,不要以为我的那个是万能的
 楼主| 发表于 2004-4-13 09:16:38 | 显示全部楼层
对呀,一回事呀
我的是:
[climb@localhost climb]$ gnuplot

        G N U P L O T
        Version 3.7 patchlevel 3
        last modified Thu Dec 12 13:00:00 GMT 2002
        System: Linux 2.4.22-1.2174.nptl

        Copyright(C) 1986 - 1993, 1998 - 2002
        Thomas Williams, Colin Kelley and many others

        Type `help` to access the on-line reference manual
        The gnuplot FAQ is available from
        http://www.gnuplot.info/gnuplot-faq.html

        Send comments and requests for help to <info-gnuplot@dartmouth.edu>
        Send bugs, suggestions and mods to <bug-gnuplot@dartmouth.edu>


Terminal type set to 'x11'
gnuplot>

我用
spawn gnuplot
expect "gnuplot>"; send "test\r"
应该可以呀?
发表于 2004-4-13 09:18:30 | 显示全部楼层
我原来异想天开,想用c对gnuplot进行交互操作,作出数据画图,然后还可以根据需要画其他变量的图,呵呵,看了别人的c调用gnuplot的例子,只能画一次,不能交互作图。
如果你成功了,麻烦告诉我一下:)
 楼主| 发表于 2004-4-13 09:23:41 | 显示全部楼层
呵呵,我大致看了一下maxima的源代码感觉也是调用expect类似的(tcl的)东西才能实现gnuplot的实时控制的。
不过,我认为expect也不行,因为expect本身也是互交的,不过expect做别的事倒是不错。
先试试expect再说。
 楼主| 发表于 2004-4-13 09:37:44 | 显示全部楼层
最初由 Maxima 发表
我原来异想天开,想用c对gnuplot进行交互操作,作出数据画图,然后还可以根据需要画其他变量的图,呵呵,看了别人的c调用gnuplot的例子,只能画一次,不能交互作图。
如果你成功了,麻烦告诉我一下:)


哈哈,有门了
http://ndevilla.free.fr/gnuplot/gnuplot_i/index.html
我看了头文件。
看起来是我们想要的东西呀
 楼主| 发表于 2004-4-13 09:53:18 | 显示全部楼层
真是奇怪了,其实我原来的想法就是和gnuplot_i.c 上面的作法类似,但是我的就是一闪而过。 只好继续看了 :-(
发表于 2004-4-13 12:16:16 | 显示全部楼层
我想找个gnuplot的中文说明,英文的看着太累了
在google没有搜到 :help
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表