Python:对第一个 OOP 风格脚本的反馈/更正

2024-04-12

我想要一些关于我的第一个使用 OOP 风格的 Python 脚本的反馈。这是一个 Munin 插件,根据插件名称(dell_fans、dell_temps)绘制平均风扇速度或平均机箱温度图表。

大约一个小时前我提交了程序版本 https://stackoverflow.com/questions/2190880/python-convert-script-from-procedural-to-oop-style将风扇速度插件添加到 stackoverflow 以获得将其转换为 OOP 风格的帮助。然后我以此为基础将两个脚本结合起来。任何反馈、建议、更正都会非常有帮助。我想在任何误解加深之前纠正它们。

Update:修改为具有公共基类。还有其他建议吗?

import sys
import subprocess

class Statistics(object):

    def __init__(self, command):
        self.command = command.split()

    def average(self):
        data = subprocess.Popen(self.command,stdout=subprocess.PIPE).stdout.readlines()

        count = total = 0
        for item in data:
            if "Reading" in item:
                # Extract variable length fan speed, without regex.
                total += float(item.split(":")[1].split()[0])
                count += 1
        # Sometimes omreport returns zero output if omsa services aren't started.
        if not count or not total:
            raise ValueError("No output from omreport. Is OMSA services started?")

        avg = (total / count)
        return avg

    def print_autoconfig(self):
        print "autoconfig goes here"


class Fanspeed(Statistics):

    def __init__(self, command):
        Statistics.__init__(self, command)

    def print_config(self):
        print "graph_title Average Fan Speed"
        print "graph_args --base 1000 -l 0"
        print "graph_vlabel speed (RPM)"
        print "graph_category Chassis"
        print "graph_info This graph shows the average speed of all fans"
        print "graph_period second"
        print "data.label speed"
        print "data.info Average fan speed for the five minutes."


class Temps(Statistics):

    def __init__(self, command):
        Statistics.__init__(self, command)

    def print_config(self):
        print "graph_title Average Temperature"
        print "graph_args --upper-limit 120 -l 0"
        print "graph_vlabel Celsius"
        print "graph_category Chassis"
        print "graph_info This graph shows the avg temp of all sensors."
        print "graph_period second"
        print "data.label temp"
        print "data.info Average chassis temperature for the five minutes."


if __name__ == '__main__':
    # Munin populates sys.argv[1] with "" (an empty argument), lets remove it.
    sys.argv = [x for x in sys.argv if x]

    if "fans" in sys.argv[0]:
        cmd = "/usr/sbin/omreport chassis fans"
        omdata = Fanspeed(cmd)
    elif "temps" in sys.argv[0]:
        cmd = "/usr/sbin/omreport chassis temps"
        omdata = Temps(cmd)
    else:
        print >> sys.stderr, "Change filename to dell_fans or dell_temps."
        sys.exit(1)

    if len(sys.argv) > 1:
        if sys.argv[1].lower() == "autoconfig":
            omdata.print_autoconfig()
        elif sys.argv[1].lower() == "config":
            omdata.print_config()
    else:
        try:
            average = omdata.average()
            print "data.value %s" % average
        except OSError, e:
            print >> sys.stderr, "Error running '%s', %s" % (cmd, e)
            sys.exit(1)
        except ValueError, e:
            # Sometimes omreport returns zero output if omsa services aren't started.
            print >> sys.stderr, 'Error: "omreport chassis fans" returned 0 output.'
            print >> sys.stderr, 'OMSA running? Try: "srvadmin-services.sh status".'
            sys.exit(1)

Is Temps a FanSpeed?这是子类化是否合适的试金石(例如,大象是一种动物,汽车不是动物 - 因此,有一个子类可能是合适的)Animal它模拟了大象,但不是大象的子类Animal为汽车建模)。

听起来他们正在建模两个不同的东西 - 所以是的,为他们创建一个公共基类。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python:对第一个 OOP 风格脚本的反馈/更正 的相关文章

  • Flask中使用的路由装饰器是如何工作的

    我熟悉 Python 装饰器的基础知识 但是我不明白这个用于 Flask 路由的特定装饰器是如何工作的 以下是 Flask 网站上的代码片段 from flask import Flask escape request app Flask
  • Tkinter 菜单删除项

    如何删除任何菜单项 例如我想删除 播放 self menubar Menu self root self root config menu self menubar self filemenu2 Menu self menubar self
  • ValueError:请使用“Layer”实例初始化“TimeDistributed”层

    我正在尝试构建一个可以在音频和视频样本上进行训练的模型 但出现此错误ValueError Please initialize TimeDistributed layer with a Layer instance You passed Te
  • 指示电子邮件的类型

    我有以下自动化程序 它将电子邮件发送给我自己 并添加了特定的链接 import win32com client as win32 import easygui import tkinter as to from tkinter import
  • 数据框 - 平均列

    我在 pandas 中有以下数据框 Column 1 Column 2 Column3 Column 4 2 2 2 4 1 2 2 3 我正在创建一个数据框 其中包含第 1 列和第 2 列 第 3 列和第 4 列等的平均值 ColumnA
  • 如何使用 Python boto3 获取 redshift 中的列名称

    我想使用 python boto3 获取 redshift 中的列名称 创建Redshift集群 将数据插入其中 配置的机密管理器 配置 SageMaker 笔记本 打开Jupyter Notebook写入以下代码 import boto3
  • 将 C++ 指针作为参数传递给 Cython 函数

    cdef extern from Foo h cdef cppclass Bar pass cdef class PyClass cdef Bar bar def cinit self Bar b bar b 这总是会给我类似的东西 Can
  • 是否有一个包可以维护所有带有符号的货币列表?

    是否有一个 python 包提供所有 或相当完整 货币的列表与符号 如美元的 有优秀的pycountry 贪财的 https github com limist py moneyed and ccy http code google com
  • OpenCV 跟踪器:模型未在函数 init 中初始化

    在视频的第一帧 我运行一个对象检测器 它返回对象的边界框 如下所示
  • 如何使用 opencv python 计算乐高积木上的孔数?

    我正在开发我的 python 项目 我需要计算每个乐高积木组件中有多少个孔 我将从输入 json 文件中获取有关需要计算哪个程序集的信息 如下所示 img 001 red 0 blue 2 white 1 grey 1 yellow 1 r
  • python 中的 h2o 框架子集

    如何在 python 中对 h2o 框架进行子集化 如果 x 是一个 df 并且 Origin 是一个变量 那么在 pandas 中我们通常可以通过以下方式进行子集化 x x Origin AAF 但使用 h2o 框架会出现以下错误 H2O
  • PIL.Image.open和tf.image.decode_jpeg返回值的区别

    我使用 PIL Image open 和 tf image decode jpeg 将图像文件解析为数组 但发现PIL Image open 中的像素值与tf image decode jpeg不一样 为什么会出现这种情况 Thanks 代
  • 使用标签或 href 传递 Django 数据

    我有一个包含链接的表 当单击该链接进行更多操作时 我想将一些数据传递给我的函数 my html table tbody for query in queries tr td value a href internal my func que
  • R 中使用 `UseMethod()` 与 `inherits()` 来确定对象的类

    如果我需要根据 R 对象的类以不同的方式处理它们 我可以使用if and else在单个函数内 foo lt function x if inherits x list Foo the list else if inherits x num
  • NumPy 相当于 Keras 函数 utils.to_categorical

    我有一个使用 Keras 进行机器学习的 Python 脚本 我正在构建 X 和 Y 它们分别是特征和标签 标签的构建方式如下 def main depth 10 nclass 101 skip True output True video
  • 为正则表达式编写解析器

    即使经过多年的编程 我很羞愧地说我从未真正完全掌握正则表达式 一般来说 当问题需要正则表达式时 我通常可以 在一堆引用语法之后 想出一个合适的正则表达式 但我发现自己越来越频繁地使用这种技术 所以 自学并理解正则表达式properly 我决
  • 如何从列表类别中对 pandas 数据框进行排序?

    所以我在下面有这个数据集 我想根据我的列表从 名称 列进行排序 以及按 A 升序和按 B 降序排序 import pandas as pd import numpy as np df1 pd DataFrame from items A 1
  • 使用 suds SOAP 库进行 HTTP 身份验证的奇怪行为

    我有一个正在运行的 python 程序 它使用 suds 通过 SOAP 获取大量数据 Web服务是通过分页功能实现的 这样我就可以抓取nnn每个 fetch 调用的行并获取下一个nnn与后续的电话 如果我使用如下代码向 HTTP 服务器进
  • PyQt5:如何使QThread返回数据到主线程

    I am a PyQt 5 4 1 1初学者 我的Python是3 4 3 这是我尝试遵循的many https mayaposch wordpress com 2011 11 01 how to really truly use qthr
  • django jet 中的自定义徽标

    我目前正在尝试对 django 管理面板的皮肤进行一些定制 以使其更符合我们的品牌 目前我们使用 django jet 来美化管理面板 django jet 可以自定义 css html 吗 所有评论都说我应该更改一些 html 文件 但我

随机推荐

  • Golang调用CUDA库

    我正在尝试从 Go 代码中调用 CUDA 函数 我有以下三个文件 test h int test add void test cu global void add int a int b int c c a b int test add v
  • 如何在 angularjs 中进行基本身份验证?

    如何在 AngularJs 中进行基本身份验证 我用谷歌搜索过 但资源对我不起作用 我是veryAngularJS 新手 假设你的 html 定义如下 h2 Todo h2 div div
  • connect-redis - 如何保护会话对象免受竞争条件影响

    我使用 nodejs 和 connect redis 来存储会话数据 我将用户数据保存在会话中 并在会话生命周期中使用它 我注意到两个更改会话数据的请求之间可能存在竞争条件 我尝试过使用 redis lock 来锁定会话 但这对我来说有点问
  • 有人可以澄清 Celery 任务中任务优先级的用法吗?

    该文档很少提及priority属性 一份罕见的文档参考资料如下 priority int The task priority a number between 0 and 9 Defaults to the attr priority at
  • Qt GUI 编译后没有改变

    我使用 Qt Designer 编译并运行创建了一个 GUI 然后我在 GUI 中做了一些更改并再次重新编译 但 GUI 保持不变 即使我删除小部件并重新编译它们也会出现 I tried Clean All and Clean Projec
  • Highcharts重绘不重绘数据

    我一直在玩Highcharts v3 0 10 在网页上呆了一周 打印页面时无法重新绘制图表 问题是我在图表中使用深色背景颜色 但在打印时 我想将其更改为白色 为了实现这一点 我需要redraw 更改后我的图表backgroundColor
  • 雪花错误:SQL 访问控制错误:没有足够的权限对​​帐户“”进行操作

    我有一个 Snowflake 的免费试用帐户 我正在尝试创建存储集成 但运行脚本后我收到以下错误 SQL访问控制错误 没有足够的权限来操作帐户 即使对于帐户管理员角色 也会出现上述错误 在 Snowflake 原始 Web UI 不是 Sn
  • 在编码 UI HtmlLogger 输出文件中写入消息

    我正在使用编码的 UI 进行自动化测试 我已经在 QTAgent32 exe config 文件中启用了 HtmlLogger 我正在获取 html 输出文件 但我正在考虑在该 html 输出文件中写入一些消息 我用了this TestCo
  • 使用 pymongo tailable 游标在空集合上消失

    希望有人能帮助我理解我是否遇到问题或者我只是不理解 mongodb tailable 游标行为 我正在运行 mongodb 2 0 4 和 pymongo 2 1 1 这是演示该问题的脚本 usr bin python import sys
  • obj.prototype = new ParentObj(); 之后的对象方法消失了在 JavaScript 中

    我正在尝试在 JavaScript 中继承对象 看一下这个例子 var BaseObject function var ChildObject function ChildObject prototype childMethod funct
  • 在幻灯片模式下运行 Jupyter 单元

    您可以通过运行以下命令在活动的 html 设置中显示 Jupyter 笔记本 jupyter nbconvert untitled ipynb to slides post serve 有没有什么方法可以以相同的幻灯片格式运行笔记本 以便实
  • 1 到 n 的整数之和

    我正在尝试编写一个程序来将 1 到 n 的数字相加 我已经设法让它多次打印数字 但不能将它们全部相加 它继续将两个数字相加 我的第一次尝试是 def problem1 3 n my sum 0 while my sum lt n my su
  • 手臂“版本”之间的差异? (仅限 ARMv7)

    基本上我想知道ARMv7l和ARMv7之间的区别hl 我有一个带有armv7l的arm处理器 并且有很多armv7的rpmhl 我完全不知道我必须搜索什么才能获得相关信息 这个 后缀 叫什么 还有其他类型吗 他们的做法有何不同 我假设它指示
  • 是否可以延长 Intellitrace 事件?

    具体来说 我想做的是从我的应用程序和库中引发新事件 类似于 ADO NET 公开的事件 现实生活场景 NHibernate 的补丁 即使查询已被缓存 因此不会到达 ADO NET 层 也会显示已执行的查询 我找到了很多关于usingInte
  • FragmentPagerAdapter 根据参数值在选项卡上重新加载处理后的片段

    我已经使用创建了我的项目this https github com tekinarslan AndroidMaterialDesignToolbar材料设计示例 我已经修改了代码 现在我有 5 个选项卡 现在我已经创建了 5 个片段类并将其
  • 无法更改 Django 管理模板

    刚刚开始官方 Django 教程 https docs djangoproject com en 1 7 intro tutorial02 customizing your project s templates并且已经遇到问题 无法在管理
  • 如何使用 Python OpenCV 定义阈值以仅检测图像中的绿色对象?

    我只想从自然环境中捕获的图像中检测绿色物体 我该如何定义它 因为在这里我想通过阈值 所以我们说 x 通过使用这个x 我只想将绿色对象变成一种颜色 白色 而其他对象必须以另一种颜色 黑色 出现 我该怎么做 One way 我制作了 HSV 颜
  • 学习 Ruby - 1.8 还是 1.9 版本?

    我已经学习 Python 一段时间了 但我想做的项目更适合 Ruby 例如 CSS 的 SAC API 在 Ruby 以及 C 和 Java 中可用 不管怎样 考虑到我将要构建 我现在应该学习哪个版本的 Rubyonly网络应用程序 感谢您
  • 检查下划线模板中未定义的变量

    我在模板中显示了libraryPrep对象的模式视图 如下所示 if isUndefined this libraryPreps this el html this template else this el html this templ
  • Python:对第一个 OOP 风格脚本的反馈/更正

    我想要一些关于我的第一个使用 OOP 风格的 Python 脚本的反馈 这是一个 Munin 插件 根据插件名称 dell fans dell temps 绘制平均风扇速度或平均机箱温度图表 大约一个小时前我提交了程序版本 https st