main()とget_network_bytes()を取得し、Pythonプロセスでラップします。
import subprocess
import time
from daemon import runner
import datetime
class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/YOUR_PROCESS_NAME.pid'
self.pidfile_timeout = 5
def run(self):
counter1 = 0
counter_log = 0
try:
while True:
# INSERT YOUR FUNCTIONS HERE
# SET YOUR LOOP SLEEP TIMER (IN SECONDS) HERE
time.sleep(60)
except Exception, e:
raise
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
次に、「python myscript.py start」で実行するか、停止または再起動すると、プロセスIDが画面に出力されます。これをバックグラウンドで実行している場合は、そのスクリプトを他のプログラムの一部としてインポートしてクエリを実行する必要があります。または、ループするたびに結果を一時ファイルに出力してから、他のプログラムにクエリを実行させることができます。その一時ファイル。「これを行うにはいくつかの異なる方法があります」
編集:
このようなものから始めてカスタマイズします。これは実際にはそれを実行する唯一の方法です。Linuxでのみ機能するifconfigの厄介な解析ではなく、psutilのような別のライブラリをお勧めします。
「必ずインターフェースを変更してください。私はWLAN0を使用していますが、別のものを使用している可能性があります」
次のスクリプトは、60秒ごとにその直前の平均TXおよびRXレートを画面に出力します。
import os
import subprocess
import time
from daemon import runner
import datetime
import re
class App():
def __init__(self):
self.stdin_path = '/dev/null'
self.stdout_path = '/dev/tty'
self.stderr_path = '/dev/tty'
self.pidfile_path = '/tmp/bandwidth_counter.pid'
self.pidfile_timeout = 5
def run(self):
rx_megabits_new = 0
tx_megabits_new = 0
try:
while True:
output = subprocess.Popen(['ifconfig', "wlan0"], stdout=subprocess.PIPE).communicate()[0]
rx_bytes = re.findall('RX bytes:([0-9]*) ', output)[0]
tx_bytes = re.findall('TX bytes:([0-9]*) ', output)[0]
rx_megabits = (((int(rx_bytes) * 8) / 1024) / 1024)
tx_megabits = (((int(tx_bytes) * 8) / 1024) / 1024)
current_rx_usage = rx_megabits - rx_megabits_new
current_tx_usage = tx_megabits - tx_megabits_new
rx_megabits_new = rx_megabits
tx_megabits_new = tx_megabits
print 'average megabits received', current_rx_usage / 60
print 'average kilobits received', (current_rx_usage * 1024) / 60
print 'average megabits sent', current_tx_usage / 60
print 'average kilobits sent', (current_tx_usage * 1024) / 60
time.sleep(60)
except Exception, e:
raise
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()
繰り返しますが、これは「python myscript.py start」で機能し、停止して再起動します。画面に印刷するのではなく、開いて書き込むファイルを追加することをお勧めします。また、ファイルが急速に大きくなるため、スペースを節約するために、gzip.open()を使用して書き込み用にファイルを開くことをお勧めします。
編集:
今回は同じデーモンがファイル/tmp/netstats_counter.logに書き込みます。これは、「1分間隔でのKB /秒単位のtxレート、1分間隔でのKB /秒単位の平均rxレート、UNIXタイムスタンプ」を含むcsvです。
import os
import subprocess
import time
from daemon import runner
import datetime
import re
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):
rx_megabits_new = 0
tx_megabits_new = 0
try:
while True:
output_csv = open("/tmp/netstats_counter.log", 'a')
output = subprocess.Popen(['ifconfig', "wlan0"], stdout=subprocess.PIPE).communicate()[0]
rx_bytes = re.findall('RX bytes:([0-9]*) ', output)[0]
tx_bytes = re.findall('TX bytes:([0-9]*) ', output)[0]
rx_megabits = (((int(rx_bytes) * 8) / 1024) / 1024)
tx_megabits = (((int(tx_bytes) * 8) / 1024) / 1024)
current_rx_usage = (rx_megabits - rx_megabits_new) / 60
current_tx_usage = (tx_megabits - tx_megabits_new) / 60
current_rx_usage_kb = current_rx_usage * 1024
current_tx_usage_kb = current_tx_usage * 1024
rx_megabits_new = rx_megabits
tx_megabits_new = tx_megabits
now = str(datetime.datetime.now())
col1 = str(current_tx_usage_kb)
col2 = str(current_rx_usage_kb)
output_csv.write(col1)
output_csv.write(", ")
output_csv.write(col2)
output_csv.write(", ")
output_csv.write(now)
output_csv.write("\n")
output_csv.close( )
# print 'average megabits received', current_rx_usage / 60
# print 'average kilobits received', (current_rx_usage * 1024) / 60
# print 'average megabits sent', current_tx_usage / 60
# print 'average kilobits sent', (current_tx_usage * 1024) / 60
time.sleep(60)
except Exception, e:
raise
app = App()
daemon_runner = runner.DaemonRunner(app)
daemon_runner.do_action()