Python论坛  - 讨论区

标题:[python-chinese] 一个关于select的问题

2007年07月12日 星期四 17:00

mmx mmxpeng在gmail.com
星期四 七月 12 17:00:33 HKT 2007

ÏëÓÃselectʵÏÖÒ»¸öÀàËÆtail -f fileµÄ¶«Î÷£¬¿ÉÒÔ½«Ò»¸öÎļþ×·¼ÓµÄÄÚÈݶ¼ÊµÊ±µÄ
ÏÔʾ³öÀ´
´úÂëÈçÏ£º

#!/usr/bin/python
from select import select
import os
fd = open('/var/log/message','r')
while 1:
    (i,o,e)=select([fd],[],[],0.3)
    for f in i:
        f_read = f[0]
        print os.read(f_read.fileno(),10)


µ«½á¹ûÊÇÏÝÈëËÀÑ­»·¡£

googleµÄ½á¹û²»Ì«ÀíÏ룬ÓÐÈË˵selectÖ»¶Ôpipe£¬socket¹ÜÓ㬶ÔÓÚregular file£¬Ã¿´Î
¶¼»á·µ»Ø¿É¶Á£¬²»¹Üµ½Ã»µ½Îļþ½áβ¡£

ÁíÍ⣬ÊÔÁËpollÒ²ÊÇͬÑùµÄЧ¹û...
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070712/273eebd4/attachment.htm 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月12日 星期四 19:10

netkiller openunix在163.com
星期四 七月 12 19:10:59 HKT 2007

¹Ø×¢.
  ----- Original Message ----- 
  From: mmx 
  To: python-chinese在lists.python.cn 
  Sent: Thursday, July 12, 2007 5:00 PM
  Subject: [python-chinese] Ò»¸ö¹ØÓÚselectµÄÎÊÌâ



  ÏëÓÃselectʵÏÖÒ»¸öÀàËÆtail -f fileµÄ¶«Î÷£¬¿ÉÒÔ½«Ò»¸öÎļþ×·¼ÓµÄÄÚÈݶ¼ÊµÊ±µÄ
  ÏÔʾ³öÀ´
  ´úÂëÈçÏ£º

  #!/usr/bin/python
  from select import select
  import os
  fd = open('/var/log/message','r')
  while 1:
      (i,o,e)=select([fd],[],[],0.3)
      for f in i:
          f_read = f[0]
          print os.read(f_read.fileno(),10)


  µ«½á¹ûÊÇÏÝÈëËÀÑ­»·¡£

  googleµÄ½á¹û²»Ì«ÀíÏ룬ÓÐÈË˵selectÖ»¶Ôpipe£¬socket¹ÜÓ㬶ÔÓÚregular file£¬Ã¿´Î
  ¶¼»á·µ»Ø¿É¶Á£¬²»¹Üµ½Ã»µ½Îļþ½áβ¡£

  ÁíÍ⣬ÊÔÁËpollÒ²ÊÇͬÑùµÄЧ¹û...






------------------------------------------------------------------------------


  _______________________________________________
  python-chinese
  Post: send python-chinese在lists.python.cn
  Subscribe: send subscribe to python-chinese-request在lists.python.cn
  Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
  Detail Info: http://python.cn/mailman/listinfo/python-chinese
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070712/1a7a4683/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月12日 星期四 19:16

沈崴 wileishn在gmail.com
星期四 七月 12 19:16:05 HKT 2007

本题无解。

在 07-7-12,netkiller<openunix在163.com> 写道:
>
>
> 关注.
>
> ----- Original Message -----
> From: mmx
> To: python-chinese在lists.python.cn
> Sent: Thursday, July 12, 2007 5:00 PM
> Subject: [python-chinese] 一个关于select的问题
>
>
>
>
> 想用select实现一个类似tail -f file的东西,可以将一个文件追加的内容都实时的
> 显示出来
> 代码如下:
>
> #!/usr/bin/python
> from select import select
> import os
> fd = open('/var/log/message','r')
> while 1:
>     (i,o,e)=select([fd],[],[],0.3)
>     for f in i:
>         f_read = f[0]
>         print os.read(f_read.fileno(),10)
>
>
> 但结果是陷入死循环。
>
> google的结果不太理想,有人说select只对pipe,socket管用,对于regular file,每次
> 都会返回可读,不管到没到文件结尾。
>
> 另外,试了poll也是同样的效果...
>
>
>
>  ________________________________
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request在lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to
> python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to
> python-chinese-request在lists.python.cn
> Detail Info:
> http://python.cn/mailman/listinfo/python-chinese
>

匿了

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月15日 星期日 09:14

mmx mmxpeng在gmail.com
星期日 七月 15 09:14:23 HKT 2007

select/poll ¶ÔÓÚregular file¶¼»á·µ»Ø¿É¶Á
ËùÒÔ×îºóÎÒÑ¡ÔñÁËÓÃsleepµÄ·½Ê½½â¾öµÄ
select²»ÄÜÓÃÔÚÕâÀï¡£


On 7/12/07, ÉòáË <wileishn在gmail.com> wrote:
>
> ±¾ÌâÎ޽⡣
>
> ÔÚ 07-7-12£¬netkiller<openunix在163.com> дµÀ£º
> >
> >
> > ¹Ø×¢.
> >
> > ----- Original Message -----
> > From: mmx
> > To: python-chinese在lists.python.cn
> > Sent: Thursday, July 12, 2007 5:00 PM
> > Subject: [python-chinese] Ò»¸ö¹ØÓÚselectµÄÎÊÌâ
> >
> >
> >
> >
> > ÏëÓÃselectʵÏÖÒ»¸öÀàËÆtail -f fileµÄ¶«Î÷£¬¿ÉÒÔ½«Ò»¸öÎļþ×·¼ÓµÄÄÚÈݶ¼ÊµÊ±µÄ
> > ÏÔʾ³öÀ´
> > ´úÂëÈçÏ£º
> >
> > #!/usr/bin/python
> > from select import select
> > import os
> > fd = open('/var/log/message','r')
> > while 1:
> >     (i,o,e)=select([fd],[],[],0.3)
> >     for f in i:
> >         f_read = f[0]
> >         print os.read(f_read.fileno(),10)
> >
> >
> > µ«½á¹ûÊÇÏÝÈëËÀÑ­»·¡£
> >
> > googleµÄ½á¹û²»Ì«ÀíÏ룬ÓÐÈË˵selectÖ»¶Ôpipe£¬socket¹ÜÓ㬶ÔÓÚregular file£¬Ã¿´Î
> > ¶¼»á·µ»Ø¿É¶Á£¬²»¹Üµ½Ã»µ½Îļþ½áβ¡£
> >
> > ÁíÍ⣬ÊÔÁËpollÒ²ÊÇͬÑùµÄЧ¹û...
> >
> >
> >
> >  ________________________________
> >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to
> > python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > Detail Info:
> > http://python.cn/mailman/listinfo/python-chinese
> >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to
> > python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > Detail Info:
> > http://python.cn/mailman/listinfo/python-chinese
> >
>
> ÄäÁË
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese




-- 
Guo Jinpeng
Mobile:86-13811168737
Room430,Building 45 jia,Peking University
BeiJing 100871
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070715/d4b48e18/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月17日 星期二 15:42

Fluke fluke.l在gmail.com
星期二 七月 17 15:42:45 HKT 2007

select()µ÷ÓÃÓ¦¸ÃÊÇÓÃÓÚsocket£¬ pipe
µÄ¡£ÒªÊµÏÖÄã˵µÄ¹¦ÄÜ£¬ÎÒµÚÒ»¸ö·´Ó³¾ÍÊÇÀûÓÃÎļþϵͳÏÖÓеİ취À´ÅжÏÎļþÊÇ·ñ±»Ð޸ģ¬±ÈÈçÓÃÐÞ¸Äʱ¼äÀ´¿´¡£È»ºóseekµ½ÄãÉϴεĵط½¾ÍokÁË£¨Õâ¸öÎļþ°´ÕÕÄãµÄÃèÊö£¬ÊDz»¶Ï×·¼ÓµÄ£¬ËùÒÔÖ±½Óseekµ½ÉÏ´ÎÏÔʾµÄλÖþͺÃÁË£©¡£

Èç¹ûÒ»¶¨Òª´ïµ½ÊµÊ±£¬¿ÉÒÔд¸öÄÚºËÄ£¿é£¬ÈÃÎļþµÄÐ޸Ĵ¥·¢Öжϡ£¡£¡££¨²»ÖªµÀÕâ¸ö°ì·¨ÊDz»ÊÇÌ«±ä̬ÁË - -b £©

On 7/12/07, mmx <mmxpeng在gmail.com> wrote:
>
>
> ÏëÓÃselectʵÏÖÒ»¸öÀàËÆtail -f fileµÄ¶«Î÷£¬¿ÉÒÔ½«Ò»¸öÎļþ×·¼ÓµÄÄÚÈݶ¼ÊµÊ±µÄ
> ÏÔʾ³öÀ´
> ´úÂëÈçÏ£º
>
> #!/usr/bin/python
> from select import select
> import os
> fd = open('/var/log/message','r')
> while 1:
>     (i,o,e)=select([fd],[],[],0.3)
>     for f in i:
>         f_read = f[0]
>         print os.read(f_read.fileno(),10)
>
>
> µ«½á¹ûÊÇÏÝÈëËÀÑ­»·¡£
>
> googleµÄ½á¹û²»Ì«ÀíÏ룬ÓÐÈË˵selectÖ»¶Ôpipe£¬socket¹ÜÓ㬶ÔÓÚregular file£¬Ã¿´Î
> ¶¼»á·µ»Ø¿É¶Á£¬²»¹Üµ½Ã»µ½Îļþ½áβ¡£
>
> ÁíÍ⣬ÊÔÁËpollÒ²ÊÇͬÑùµÄЧ¹û...
>
>
>
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to  python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>



-- 
Yours,
  fluke
fluke在sfcube.net
http://blog.ospattern.net
-------------- 下一部分 --------------
Ò»¸öHTML¸½¼þ±»ÒƳý...
URL: http://python.cn/pipermail/python-chinese/attachments/20070717/5faa6407/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月18日 星期三 01:03

Shao Feng sevenever在gmail.com
星期三 七月 18 01:03:31 HKT 2007

C的tail -f 是如何实现的?
好像是定时(一秒)检查文件是否被修改。

On 7/17/07, Fluke <fluke.l在gmail.com> wrote:
>
> select()调用应该是用于socket, pipe
> 的。要实现你说的功能,我第一个反映就是利用文件系统现有的办法来判断文件是否被修改,比如用修改时间来看。然后seek到你上次的地方就ok了(这个文件按照你的描述,是不断追加的,所以直接seek到上次显示的位置就好了)。
>
> 如果一定要达到实时,可以写个内核模块,让文件的修改触发中断。。。(不知道这个办法是不是太变态了 - -b )
>
>  On 7/12/07, mmx <mmxpeng在gmail.com> wrote:
>
> >
> > 想用select实现一个类似tail -f file的东西,可以将一个文件追加的内容都实时的
> > 显示出来
> > 代码如下:
> >
> > #!/usr/bin/python
> > from select import select
> > import os
> > fd = open('/var/log/message','r')
> > while 1:
> >     (i,o,e)=select([fd],[],[],0.3)
> >     for f in i:
> >         f_read = f[0]
> >         print os.read(f_read.fileno(),10)
> >
> >
> > 但结果是陷入死循环。
> >
> > google的结果不太理想,有人说select只对pipe,socket管用,对于regular file,每次
> > 都会返回可读,不管到没到文件结尾。
> >
> > 另外,试了poll也是同样的效果...
> >
> >
> >
> > _______________________________________________
> > python-chinese
> > Post: send python-chinese在lists.python.cn
> > Subscribe: send subscribe to python-chinese-request在lists.python.cn
> > Unsubscribe: send unsubscribe to
> > python-chinese-request在lists.python.cn
> > Detail Info: http://python.cn/mailman/listinfo/python-chinese
> >
>
>
>
> --
> Yours,
>   fluke
> fluke在sfcube.net
> http://blog.ospattern.net
> _______________________________________________
> python-chinese
> Post: send python-chinese在lists.python.cn
> Subscribe: send subscribe to python-chinese-request在lists.python.cn
> Unsubscribe: send unsubscribe to   python-chinese-request在lists.python.cn
> Detail Info: http://python.cn/mailman/listinfo/python-chinese
>
-------------- 下一部分 --------------
一个HTML附件被移除...
URL: http://python.cn/pipermail/python-chinese/attachments/20070718/9f594720/attachment.html 

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

2007年07月18日 星期三 01:39

Xin LI delphij在delphij.net
星期三 七月 18 01:39:56 HKT 2007

Shao Feng wrote:
> C的tail -f 是如何实现的?
> 好像是定时(一秒)检查文件是否被修改。

定时检查是可移植性比较好的办法,然而响应速度和CPU占用(需要忙等)都不理想。

现代的内核基本上都支持事件通知能力。FreeBSD上面可以用kqueue()创建一个新 
的消息队列,并使用kevent()订阅并等待该队列中的信息(此时进程以‘kqread’, 
即KQueue READ状态休眠)。当OS发现进程订阅的消息发生时,即返回到调用 
kevent的线程,以执行相应的任务。

具体写法可参考 
http://www.freebsd.org/cgi/cvsweb.cgi/src/usr.bin/tail/forward.c?annotate=1.41 
  。

Cheers,

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-python]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2025

    京ICP备05028076号