2016-08-01 6 views
0

私はmcelog.confという名前のファイルが1つあり、私のコードでこのファイルを読んでいます。ファイルの内容はPythonでファイルから行を読み込みます

no-syslog = yes # (or no to disable) 
logfile = /tmp/logfile 

プログラムはmcelog.confファイルを読み込みますし、no-syslog = yesは、プログラムは、タグlogfileをチェックしなければならない場合、no-syslogタグをチェックするとlogfileタグを読み込みますです。

line.split(' = ')[1] 

しかし、あなたがドキュメントを見たいと思うかもしれません:誰も私は、私はあなたがちょうどあなたがしたい値を取得するために行を分割することができます値/tmp/logfile

with open('/etc/mcelog/mcelog.conf', 'r+') as fp: 
    for line in fp: 
     if re.search("no-syslog =", line) and re.search("= no", line): 
      memoryErrors = readLogFile("/var/log/messages") 
      mcelogPathFound = true 
      break 
     elif re.search("no-syslog =", line) and re.search("= yes", line): 
      continue 
     elif re.search("logfile =", line): 
      memoryErrors = readLogFile(line) # Here I want to pass the value "/tmp/logfile" but currently "logfile = /tmp/logfile" is getting passed 
      mcelogPathFound = true 
      break 
fp.close() 
+0

正規表現グループを試しましたか?または、等号を分割して、本質的にキー値の辞書を作成しますか? –

+0

いいえ、私は正規表現のグループを試していませんが、 '='記号で各行を分割しようとすると、ファイルにいくつかのコメントがあると例外が発生する可能性があります。 @ cricket-007 –

+0

なぜですか?あなたは同じことを言っている両方の答えにコメントしました –

答えて

1

変更コードに:あなたは全体のことではなく行の一部だけを読みたいので

with open('/etc/mcelog/mcelog.conf', 'r+') as fp: 
    for line in fp: 
     if re.search("no-syslog =", line) and re.search("= no", line): 
      memoryErrors = readLogFile("/var/log/messages") 
      mcelogPathFound = true 
      break 
     elif re.search("no-syslog =", line) and re.search("= yes", line): 
      continue 
     elif re.search("logfile =", line): 
      emoryErrors = readLogFile(line.split("=")[1].strip()) # Here I want to pass the value "/tmp/logfile" but currently "logfile = /tmp/logfile" is getting passed 
      mcelogPathFound = true 
      break 
fp.close() 

これはので、私はちょうど「=」記号で、それを分割し、それを剥奪しているありますそこでここではその一例は、(Pythonの3)与えられた入力について

であり、Iはconfigparserモジュールの提案が好き

+0

私が 'emoryErrors = readLogFile(line).split(" = ")[1] .strip()'を試したとき、readLogFile関数は同じ引数 "logfile =/tmp/logfile"を渡しています。しかし、私が 'emoryErrors = readLogFile(line.split(" = ")[1] .strip())のように渡すと、うまく動作します。 @ gaurav-dhama –

+0

ええ、私の一部に間違いがあります。同じことを反映するために私の答えを変更しました。私はあなたが考えを持っていることを願っています。 –

+0

ええ、そのアイデアとそのうまく動作しました。ありがとう@ gaurav-dhama –

2

を得ることができますどのように知らせることができます。

+0

私は 'emoryErrors = readLogFile(line.split(" = ")[1] .strip())'を試してみたところ、うまく動いていました。ありがとう@icart –

1

空白を削除して、それが出力reading /var/log/messages

import configparser, itertools 
config = configparser.ConfigParser() 
filename = "/tmp/mcelog.conf" 

def readLogFile(filename): 
    if filename: 
     print("reading", filename) 
    else: 
     raise ValueError("unable to read file") 

section = 'global' 
with open(filename) as fp: 
    config.read_file(itertools.chain(['[{}]'.format(section)], fp), source = filename) 

no_syslog = config[section]['no-syslog'] 
if no_syslog == 'yes': 
    logfile = "/var/log/messages" 
elif no_syslog == 'no': 
    logfile = config[section]['logfile'] 

if logfile: 
    mcelogPathFound = True 

memoryErrors = readLogFile(logfile) 
関連する問題