2007年07月12日 星期四 17:00
ÏëÓÃ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
2007年07月12日 星期四 19:10
¹Ø×¢. ----- 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
2007年07月12日 星期四 19:16
本题无解。 在 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 > 匿了
2007年07月15日 星期日 09:14
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
2007年07月17日 星期二 15:42
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
2007年07月18日 星期三 01:03
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
2007年07月18日 星期三 01:39
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,
Zeuux © 2025
京ICP备05028076号