3

私は、HTTP トラフィック ラインでファイルを解析し、ドメインを取り出して、現在、それらを画面に出力するだけのスクリプトを書いています。httpry を使用して、トラフィックを継続的にファイルに書き込みます。ドメイン名を削除するために使用しているスクリプトは次のとおりです

#!/usr/bin/python

import re

input = open("results.txt","r")

for line in input:
    domain = line.split()[6]
    if domain != "-":
        print domain

このスクリプトはうまく機能しますが、このスクリプトを継続的に実行して、新しいトラフィックが入力ファイルに追加されたときに、スクリプトがそれを取り除くことができるようにしたいと考えています。最終的にはこれらのドメインを Mongo データベースに入力することになるため、httpry の出力に対して awk を実行することはできません。そのためのスクリプトも必要になります。出力でこの python スクリプトを常に実行するが、以前のエントリを再表示しない方法を誰かが教えてくれれば、大歓迎です。ありがとう。

4

2 に答える 2

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
于 2012-11-30T03:16:32.100 に答える
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ともうまく統合されるはずです:)

于 2012-11-30T03:44:41.623 に答える