2017-02-14 68 views
0

У меня проблема с моим скриптом, который подсчитывает среднее значение из базы данных.Выполнение операций в определенные периоды?

Вот код:

import MySQLdb 
import argparse 
import time 

#args section 
parser = argparse.ArgumentParser() 
parser.add_argument("-i", "--ip", required=True) 
parser.add_argument("-r", "--ram", action="store_true", required=False) 
parser.add_argument("-c", "--cpu", action="store_true", required=False) 
parser.add_argument("-t", "--time", type=int, required=True) 

args = parser.parse_args() 

db1 = MySQLdb.connect(args.ip ,user="root",passwd="root") 
cursor = db1.cursor() 
use_db = "USE env_data;" 

starttime = time.time() 

def one_min(): 
     one_minute = time.sleep(60.0 - ((time.time() - starttime) % 60.0)) 
     return one_minute 


def cpu_usage(): 
     cpu_select = "SELECT cpu_usage FROM env_data;" 
     cpu_avg = "SELECT SUM(cpu_usage)/count(cpu_usage) from env_data;" 

     cursor.execute(use_db) 
     cursor.execute(cpu_select) 
     cursor.execute(cpu_avg) 
     result = cursor.fetchall() 

     result = str(result) #converted to string for replace operations 
     for i in ['(',')',',', "'",'[', ']']: 
       if i in result: 
         result = result.replace(i, '') 

     print result 


def ram_usage(): 
     mem_select = "SELECT mem_usage FROM env_data;" 
     mem_avg = "SELECT SUM(mem_usage)/count(mem_usage) from env_data;" 

     cursor.execute(use_db) 
     cursor.execute(mem_select) 
     cursor.execute(mem_avg) 
     result = cursor.fetchall() 

     result = str(result) 
     for i in ['(',')',',', "'",'[', ']']: 
       if i in result: 
         result = result.replace(i, '') 

     print result 

if args.cpu: 
     cpu_usage() 
elif args.ram: 
     ram_usage() 

Пользователь должен ввести --time аргумент для определения времени задержки. Например:

my_script.py -i localhost -c -t 60 

Мне нужно иметь три периода - 1/15/60 минут.

Как я должен написать это правильно, не используя многие заявления if?

+0

Итак, вы хотите запустить операцию несколько раз с задержкой между ними? Если да, не могли бы вы просто использовать 'time.sleep()' для задержки между каждой итерацией. Также, когда ваш сценарий должен остановиться? – martineau

+0

вы можете использовать 'string.translate' для удаления символов' string.translate (s, table [, deletechars]) Удалить все символы из s, которые находятся в файлах удаления (если есть), а затем перевести символы с помощью таблицы, которая должна быть 256-символьной строкой, дающей перевод для каждого символьного значения, индексированный его порядковым номером. Если таблица None, то выполняется только шаг удаления символов. ' –

+0

Или вы можете сделать форматирование строк, так как' cursor.fetchall() 'возвращает список кортежей –

ответ

0

Вы можете принимать все интервалы в виде аргументов командной строки и просто перебирать их или, если они каким-то образом связаны и могут быть получены друг от друга, напишите функцию, которая выполняет преобразование.