python - 将输出输出到 python 容器并在值上运行命令
问题描述
我想知道是否有人可以帮助我尝试构建一个脚本,以便我可以监控我的硬盘驱动器。我想做的是使用 smartmontools 来获取我需要的所有数据。
我正在尝试构建的是:
驱动器扫描仪
Scan_of_Drives = os.system('cmd /k smartctl --scan')
print Scan_of_Drives
我得到这个输出:
/dev/sda -d ata # /dev/sda, ATA device
/dev/csmi0,0 -d ata # /dev/csmi0,0, ATA device
现在我正在尝试获取值“sda”和“csmi”(请注意,如果还有更多驱动器我也需要它们)并将其存储在一个容器中,以便我可以使用我的下一个代码运行它。
这是:(
os.system('cmd /k smartctl -x sda')
等等等等)
然后将该数据存储到一个名为“ sda_data
”的容器中
如果这超出了问题的标准,我很抱歉,但我已经尝试了大约四个星期,而且我对 python 非常陌生,这也对我不利。
我将不胜感激任何建议或网站链接以帮助我解决此问题。
解决方案
你不能做任何事情,os.system
因为它在一个子shell中执行命令而不让你访问很多东西,你可以从它的返回值知道命令是成功还是失败。
您想要的是subprocess
更加灵活,除此之外,您还可以检索命令生成的文本(打印到标准输出)。在这里,您正在寻找的是subprocess.check_call(或 Python 3 上的参数的正确组合,subprocess.run
尽管情况似乎并非如此)。
这样,您将获得作为字符串的结果输出,您可以对其进行切片和切块以检索您需要的任何信息。
另一种方法是使用 pySMART 之类的东西,它包装 smartctl 并为您进行解析,为您正在寻找的内容提供直接的编程 API。
推荐阅读
- python - 计算数据系列的百分比
- node.js - 为什么我的 node_modules 文件夹中有这么多我没有安装的文件?
- android - OkHttp 无法连接到 ESP8266
- rrdtool - RRD工具。VDEF 上的简单数学运算
- python - 增加类__init__中的字典值?
- ls - What does * means in the list from the ls command?
- leaflet - 如何在 TileLayer 的瓷砖上进行预处理,然后再将它们显示在 Leaflet 上?
- cron - 延迟执行 crontab 直到执行 @reboot
- mongodb - 如何同时使用 MongoDB 的 $text 和 $nearSphere 搜索运算符?
- c++ - 如何将多种不同长度的数据类型插入变量中?