免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: ypxns
打印 上一主题 下一主题

利用shell来获取某个程序实时输出数据的结果 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-01-06 17:51 |只看该作者
目前写的shell程序如下:
tvplayer -vo null -tv driver=v4l2:norm=PAL  tv:// -tvscan autostart  -nosound -quiet |
awk '{
   if (/Trying:/)
       { ++try }
   if (/Found new/)
       { ++new }
   percent=expr try*100/93
   printf "%d Found %d analog channels\n",percent,new > "/tmp/trash/scan_progress.out"
   print $0 > "/tmp/trash/scan.out" }
   END {  printf "TV scan end\n" >"/tmp/trash/scan_progress.out" }'

其中得到的scan_progress.out文件内容如下:

6 Found 1 analog channels
7 Found 1 analog channels
7 Found 2 analog channels
8 Found 2 analog channels
8 Found 3 analog channels
9 Found 3 analog channels
9 Found 4 analog channels
10 Found 4 analog channels
10 Found 5 analog channels
11 Found 5 analog channels
11 Found 6 analog channels
12 Found 6 analog channels
......................................................................
94 Found 14 analog channels
95 Found 14 analog channels
96 Found 14 analog channels
97 Found 14 analog channels
98 Found 14 analog channels
100 Found 14 analog channels
TV scan end


出现了很多   Found  N  analog channels 语句,但是我只想得到一条语句,并且 其中的数据是不断更新的,不知道有什么好的方法没?

论坛徽章:
0
12 [报告]
发表于 2009-01-08 10:04 |只看该作者
解决办法 ---使用 "&"


  使mplayer扫描程序在后台运行,这样就不会一直等到该程序运行完成之后才执行下面的命令,see:

  tvplayer -vo null -tv driver=v4l2:norm=PAL tv:// -tvscan autostart  -nosound -quiet > $SCAN_OUT  &

until grep "TV scan end" <$SCAN_OUT
do
   try=`cat $SCAN_OUT | grep Trying | wc -l`
   new=`cat $SCAN_OUT | grep "Found new" | wc -l`
   echo "$((${try}*100/${MAX})) Found $new analog channels." > $SCAN_PROGRESS
   sleep 1
done
  echo "TV scan end" >>$SCAN_PROGRESS


scan_progress.out文件输出的结果正好符合要求:
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP