У меня проблема с моим скриптом, который подсчитывает среднее значение из базы данных.Выполнение операций в определенные периоды?
Вот код:
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
?
Итак, вы хотите запустить операцию несколько раз с задержкой между ними? Если да, не могли бы вы просто использовать 'time.sleep()' для задержки между каждой итерацией. Также, когда ваш сценарий должен остановиться? – martineau
вы можете использовать 'string.translate' для удаления символов' string.translate (s, table [, deletechars]) Удалить все символы из s, которые находятся в файлах удаления (если есть), а затем перевести символы с помощью таблицы, которая должна быть 256-символьной строкой, дающей перевод для каждого символьного значения, индексированный его порядковым номером. Если таблица None, то выполняется только шаг удаления символов. ' –
Или вы можете сделать форматирование строк, так как' cursor.fetchall() 'возвращает список кортежей –