免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2249 | 回复: 5
打印 上一主题 下一主题

代码求教 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-04-20 19:07 |只看该作者 |倒序浏览
怎样实现下面这段代码,一边print,一边写入文件?(想过用读取写入文件的方法,但想到如果需获取的邮件数特别大,不停的读写关闭文件,对硬盘来说,来不可想像了)

  1. #mail.py
  2. #!/usr/bin/env python

  3. import poplib, getpass, string, sys, pickle

  4. host = raw_input("the hostname:")
  5. if (len(host)) == 0:
  6.         host = 'your host name'
  7.         username = 'your username'
  8.         password = 'your password'
  9. else:
  10.         username = raw_input("your username:")
  11.         password = getpass.getpass()


  12. try:
  13.         sess = poplib.POP3(host)
  14.         sess.user(username)
  15.         sess.pass_(password)
  16. except:
  17.         print "0^0,there is an error in open connection"
  18.         sys.exit()

  19. nMess = sess.stat()[0]
  20. headers = []
  21. for i in range(1,nMess+1):
  22.         print
  23.         mesg = sess.top(i,0)
  24.         print i, mesg[0]
  25.         for j in range(len(mesg[1])):
  26.                 if mesg[1][j][0:5] == 'From:' or mesg[1][j][0:5] == 'Date:':
  27.                         print mesg[1][j]
  28.                         headers.append(mesg[1][j])

  29. if nMess>0:
  30.         print "received %i message total"%(nMess)
  31.         d01 = open("From_dizhi.txt", 'w')
  32.         pickle.dump(headers, d01)
  33.         d01.close()
  34. else:
  35.         print "Nop ,no mail on", host, "for", username

  36.         sess.quit()
复制代码

论坛徽章:
0
2 [报告]
发表于 2008-04-21 13:53 |只看该作者
用两个进程吧,一个pint一个写文件,另外不用担心频繁操作硬盘的问题,写的时候打开,写完关闭就可以了.你不可能每秒都有100封邮件吧.

论坛徽章:
0
3 [报告]
发表于 2008-04-22 11:49 |只看该作者
感觉还是用两个线程方便

论坛徽章:
0
4 [报告]
发表于 2008-04-22 14:13 |只看该作者
我把后面这一段改成这样的:
nMess = sess.stat()[0]
headers = []
d01= open("From_dizhi.txt", 'w')
for i in range(1,nMess+1):
        print
        mesg = sess.top(i,0)
        print i, mesg[0]
        for j in range(len(mesg[1])):
                if mesg[1][j][0:5] == 'From:' or mesg[1][j][0:5] == 'Date:':
                        print mesg[1][j]
                        pickle.dump(mesg[1][j], d01)

d01.close()
if nMess>0:
        print "received %i message total"%(nMess)
else:
        print "Nop ,no mail on", host, "for", username
sess.quit()

这样能够实现一般print,一边写入。
至于二个线程的问题,不是很明白,还望解释解释一二。

论坛徽章:
0
5 [报告]
发表于 2008-04-22 16:41 |只看该作者
想复杂了,我是想一个线程 print将值写到Queue中,另一个线程从队列中取值写入文件。这样即使写入文件比较慢,print也可以及时输出?

论坛徽章:
0
6 [报告]
发表于 2008-04-22 17:15 |只看该作者
初学,看不懂
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP