我正在编写一个脚本,用HTTP流量线解析文件,并取出域,目前只是将它们打印到屏幕上。我正在使用httpry将流量连续写入文件。这是我用来删除域名的脚本
#!/usr/bin/python
import re
input = open("results.txt","r")
for line in input:
domain = line.split()[6]
if domain != "-":
print domain
虽然这个脚本运行良好,但我想要一种连续运行此脚本的方法,以便在将新流量添加到输入文件时,脚本可以将其删除。我不能只在httpry的输出上运行awk,因为我最终会将这些域输入到Mongo数据库中,我也需要脚本来执行此操作。如果有人能给我一些想法如何在输出上不断运行这个python脚本,但不重新打印以前的条目,那将非常感激。感谢。
答案 0 :(得分:6)
尝试http://code.activestate.com/recipes/157035-tail-f-in-python/
中的tail -f
实施
import time
while 1:
where = file.tell()
line = file.readline()
if not line:
time.sleep(1)
file.seek(where)
else:
print line, # already has newline
答案 1 :(得分:0)
Node.js有一个很好的readline模块,可以很好地处理这个问题:
var readline = require('readline')
, fs = require('fs')
var input = process.stdin; // or: fs.createReadStream('input.txt');
var output = process.stdout; // or: fs.createWriteStream('output.txt')
var reader = readline.createInterface({
input: input,
output: output
});
reader.on('line', function(line) {
this.write(line.split(/[ ]+/)[6]);
});
将其保存在.js文件中并执行node domains.js
或其他任何命名。或cat file | node domains.js
。
它将来也应该很好地与mongodb整合:)