ファイルに書き込まれている間隔(おそらく1分)あたりの行数に関する統計を取得できるPythonスクリプトを作成することに興味があります。データが入ってくると書き込まれるファイルがあります。ユーザーごとに新しい行が外部プログラムを介してデータを渡します。xあたりの行数を知ることで、将来の拡張計画に使用できるメトリックが得られます。出力ファイルは行で構成され、すべて比較的同じ長さで、すべて最後に行が返されます。私は次のようなスクリプトを書くことを考えていました:特定のポイントでファイルの長さを測定し、その後別のポイントでそれを再度測定し、2を引いて結果を得る...しかし私は知りませんファイルの長さを測定するのに時間がかかり、結果が歪む可能性があるため、これが理想的な場合。他に何かアイデアはありますか?
人々が言っていることに基づいて、私はこれを一緒に投げて始めました:
import os
import subprocess
import time
from daemon import runner
#import daemon
inputfilename="/home/data/testdata.txt"
class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/count.pid'
self.pidfile_timeout = 5
def run(self):
while True:
count = 0
FILEIN = open(inputfilename, 'rb')
while 1:
buffer = FILEIN.read(8192*1024)
if not buffer: break
count += buffer.count('\n')
FILEIN.close( )
print count
# set the sleep time for repeated action here:
time.sleep(60)
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
それは60秒ごとにカウントを取得し、それを画面に出力する仕事をします。私の次のステップは私が推測する数学です。
もう1つの編集:1分間隔でカウントの出力を追加しました:
import os
import subprocess
import time
from daemon import runner
#import daemon
inputfilename="/home/data/testdata.txt"
class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/twitter_counter.pid'
self.pidfile_timeout = 5
def run(self):
counter1 = 0
while True:
count = 0
FILEIN = open(inputfilename, 'rb')
while 1:
buffer = FILEIN.read(8192*1024)
if not buffer: break
count += buffer.count('\n')
FILEIN.close( )
print count - counter1
counter1 = count
# set the sleep time for repeated action here:
time.sleep(60)
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()