1

必要な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 に答える