2017-02-14 39 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个字符的字符串,为每个字符值提供翻译,并按其序号进行索引。如果table是None,那么只执行字符删除步骤。' –

+0

或者你可以做字符串格式化,因为'cursor.fetchall()'返回一个元组列表 –

回答

0

你可以接受所有的间隔作为命令行参数,只是循环它们,或者,如果它们以某种方式相关并且可以相互派生,则编写一个执行转换的函数。

相关问题