我在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)
答案 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)
您有两种方法可以实现这一目标。
with
语句(上下文
经理)因为@Nick B建议在他的回答中打开你的档案
那里。 所以你说的是:
# 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中缓冲的工作原理。