0

我想不时捕获远程 linux 服务器的性能(CPU 和内存使用情况),例如终端中 TOP 命令的输出,并将其导入本地 Windows 机器上的 excel 文件。我正在考虑使用 python 连接到服务器并执行命令并记录其输出。我对python完全陌生,请提出一些解决这个问题的方法,比如我应该从哪里开始等等。

4

2 回答 2

2

使用 Python 模块“fabric”,然后使用 fabricrun函数来捕获远程主机上命令的输出。

它看起来像这样:

import csv
from fabric.api import *

env.hosts = ['user@remotehost:22']
FILENAME = '/tmp/info.csv'


def get_info():
    output = run('top -bn 1')
    lines = output.splitlines()

    with open(FILENAME, 'wb') as csvfile:
        info = csv.writer(csvfile)
        for l in lines:
             info.writerow(l.split())

然后使用:fab get_info从脚本目录运行它。

它将从远程机器的“top”输出中写入一个本地 csv 文件。然后可以从 Excel 打开 csv 文件。csv 文件看起来有点难看。但这一切都是为了将​​最后一行更改为更智能的内容。

于 2013-02-24T14:49:55.723 回答
1

看一下os.times

>>> import os
>>> os.times()
(0.01, 0.0, 0.0, 0.0, 1361716040.0)
>>> help(os.times)
times() -> (utime, stime, cutime, cstime, elapsed_time)

Return a tuple of floating point numbers indicating process times.

os.times.. 并在给定的时间段内以给定的频率重复调用mimi top

将其导入 Excel 文档并不那么简单,但 Excel 可以理解csv,逗号分隔的变量文件,所以可能类似于

import time
from datetime import datetime
import os

with open('output.csv', 'w') as co:    
    for i in range(100):
        co.write('%s, %f,\n' % (datetime.now(), os.times()[0]))

    time.sleep(5)

这将打开一个文件“ output.csv”,写入当前时间和 cpu 使用情况,等待 5 秒然后重复 100 次。csv然后可以在 Excel 中打开该文件。

示例输出:

2013-02-24 14:40:12.254806, 0.01,
2013-02-24 14:40:12.304922, 0.05,
2013-02-24 14:40:12.357945, 0.06,
2013-02-24 14:40:12.404362, 0.04,

要连接到远程服务器,请查看 Pythonssh2模块paramiko

正如@Christian Groleau所提到的那样编辑,如果您要对文件进行繁重的工作csv,请查看csvpython 模块。甚至有人写了一些直接读/写excel文件的模块(python不是很好吗?!)

于 2013-02-24T14:27:43.043 回答