Python脚本停止写入,但显示为正在运行的进程

时间:2015-01-21 15:00:15

标签: python performance shared-libraries

我在linux服务器的屏幕上运行一个python脚本,当我执行TOP命令时,我可以看到它正在运行,但是脚本没有写任何东西已经好几个小时了。有人知道可能是什么原因吗?

这是我的剧本:

import GeoIP
from netaddr import *

gi = GeoIP.GeoIP("/data/GeoIPOrg_20141202.dat", GeoIP.GEOIP_MEMORY_CACHE)
o = Path to the output text file

for line in f:
    line = line.strip('\n')
    asn,ip,count =line.split('|')
    org = gi.org_by_addr(ip)
    start,end = gi.range_by_ip(ip)
    ran = list(IPRange(start,end))
#    ipcount = len(ran)
    ip_start,ip_end = IPAddress(start),IPAddress(end)
    n_start = int(ip_start)
    n_end = int(ip_end)
    range = (n_start,n_end)
    print ("%s|%s|%s|%s|%s|%s" % (asn,range,len(ran),org,ip,count) , file = o)

2 个答案:

答案 0 :(得分:1)

这可能是一些事情;很难说没有看到你如何运行以及你如何初始化该文件。

一个明确的可能性是该文件不是flushed(更相关的是,请参阅有关更改open()缓冲区大小的文档,因为它可能在您的代码中被调用)。

无论哪种方式值得使用Python(2.5 +)的with语句来整齐而健壮地处理文件/资源​​管理,而不是依赖于print,例如:

with open("/my/output/path.txt", "w") as out_file:
    # Rest of code
    # ...
    out_file.write("%s|%s|%s|%s|%s|%s\n" % (asn,range,len(ran),org,ip,count))

有关使用with语句的好例子,请参阅this SO question

答案 1 :(得分:1)

您有两种方法可以实现这一目标。

  1. 您可以更改代码以使用with语句(上下文 经理)因为@Nick B建议在他的回答中打开你的档案 那里。
  2. 或者您可以设置打开文件的缓冲区     线缓冲。
  3. 所以你说的是:

    # Im assuming you open your file like this since your code is
    # an incomplete snippet. Otherwise tell us how you open your file
    o = open('output_file.log', 'w')  
    

    你必须说:

    o = open('output_file.log', 'w', buffering=1)  # enable line buffering
    

    您应该通过在交互式python shell中键入open来阅读help(open)命令的帮助。它解释了python中缓冲的工作原理。