无法使用python从Linux shell命令提取信息
我正在创建一个Python脚本来收集基础硬件上的数据cat /proc/cpuinfo
我试图提取我需要的信息。但我有问题。这里是脚本无法使用python从Linux shell命令提取信息
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
我的程序不会进入如果循环在所有原因?在此先感谢帮助
很难说什么是错的。我无法一目了然,但在我的Ubuntu 12.10上,它也以相同的方式失败。无论如何,使用subprocess
模块,因为popen
已弃用。
subprocess.check_output(['cat', '/proc/cpuinfo'])
返回一个字符串相当成功,至少在我的系统上。 subprocess.check_output(['cat', '/proc/cpuinfo']).split('\n')
会给你一个你可能会遍历的列表。请注意0将不起作用。在将该行分割为':'
之后有一些标签。不要忘记调用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.
根本没有必要在这里使用cat
。重构它是这样的:
with open("/proc/cpuinfo") as f:
for line in f:
# potato potato ...
+1/proc/cpuinfo是一个文件。 – 2013-02-18 05:49:00
它可能会进入循环,但可能会有“模型名称”周围的空白。您可以拨打.strip()
将其删除。如果你不需要完整列表string
for line in p.readlines():
line=line.split(":")
if(line[0]=='model name\t') :
#Do work
:
您可以打开/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
你可以尝试做的。
感谢得到它的工作.. – Rakesh 2013-02-18 05:47:28