1

我正在创建一个 Python 脚本来收集底层硬件上的数据,cat /proc/cpuinfo 我正在尝试提取我需要的信息。但我有一个问题。这是脚本

import os
p=os.popen ("cat /proc/cpuinfo")
string=[]
i=0
for line in p.readlines():
   string.append(line.split(":"))
   if(string[i][0]=='model name'): 
        fout = open("information.txt", "w")
        fout.write("processor:")
        fout.write(string[i][1])
        fout.close()
   i+=1

我的程序根本没有进入 if 循环,为什么?提前感谢您的帮助

4

4 回答 4

2

这里根本没有使用cat的意义。像这样重构它:

with open("/proc/cpuinfo") as f:
  for line in f:
    # potato potato ...
于 2013-02-18T05:48:27.893 回答
1

它可能确实进入了循环,但“模型名称”周围可能有一个空格。你可以打电话.strip()删除它。

您可以/proc/cpuinfo作为文件打开:

with open("/proc/cpuinfo") as file:
    for line in file:
        key, sep, value = line.partition(":")
        if sep and key.strip() == "model name":
           with open("information.txt", "w") as outfile:
               outfile.write("processor:" + value.strip())
           break
于 2013-02-18T05:50:09.827 回答
0

很难说到底出了什么问题。我一目了然,虽然在我的 Ubuntu 12.10 上它也以同样的方式失败。无论如何,请使用该subprocess模块,因为popen已弃用。

subprocess.check_output(['cat', '/proc/cpuinfo'])至少在我的系统上非常成功地返回了一个字符串。并且subprocess.check_output(['cat', '/proc/cpuinfo']).split('\n')会给你一个你可以迭代的列表。

另请注意,这string[i][0]=='model name'不起作用。将该行拆分后有标签':'。不要忘记致电strip()string[i][0].strip()=='model name'

然后,在 Python 2.6+(甚至 2.5+,尽管 2.5 需要)上,处理需要打开的文件from __future__ import with_statement几乎总是一个好习惯:with

with open("information.txt", "w") as fout:
    fout.write("processor:")
    fout.write(string[i][1])

最后,那些说你可以打开一个文件并阅读它的人是完全正确的。这是最好的解决方案:

with open('/proc/cpuinfo') as f:
    #Here you may read the file directly.
于 2013-02-18T05:33:22.787 回答
-1

您可以尝试这样做:

for line in p.readlines():
    line=line.split(":")
    if(line[0]=='model name\t') :
            #Do work

如果您不需要完整列表string

于 2013-02-18T05:50:30.663 回答