3

Python スクリプトのサポートが必要です。dhcpd ファイルでホスト全体、それらの MAC および IP を検索し、それを 1 行で出力する必要があります。ホスト名と IP アドレスを見つけることはできますが、if ステートメントから変数を取り出して 1 行に入れる方法がわかりません。任意の提案、コードは以下のとおりです。

#!/usr/bin/python

import sys
import re

#check for arguments

if len(sys.argv) > 1:
    print "usage: no arguments required"
    sys.exit()
else:
    dhcp_file = open("/etc/dhcp/dhcpd.conf","r")
    for line in dhcp_file:
        if re.search(r'\bhost\b',line):
            split = re.split(r'\s+', line)
            print split[1]
        if re.search(r'\bhardware ethernet\b',line):
            ip = re.split(r'\s+',line)
            print ip[2]
    dhcp_file.close()
4

3 に答える 3

8

これについては、いくつかの方法があります。おそらく最も簡単なのは、if ステートメントの前に空の文字列を初期化することです。次に、split[1] と ip[2] を出力する代わりに、それらを空の文字列に連結し、後で出力します。したがって、次のようになります。

    printstr = ""
    if re.search...
        ...
        printstr += "Label for first item " + split[1] + ", "
    if re.search...
        ...
        printstr += "Label for second item " + ip[2]
    print printstr
于 2013-06-18T01:27:25.530 に答える
6

一般的なケースでは、コンマ区切りの値を print() に渡して、それらすべてを 1 行に出力できます。

entries = ["192.168.1.1", "supercomputer"]
print "Host:", entries[0], "H/W:", entries[1]

あなたの特定のケースでは、関連するエントリをリストに追加し、そのリストを最後に印刷するのはどうですか?

entries = []
...
entries.append(split[1])
...
print entries

この時点で、収集した「エントリ」を 1 つの文字列に結合することができます。その場合は、join() メソッドを使用できます (abarnert の提案による):

print ' '.join(entries)

または、より洗練されたものにしたい場合は、 "string": "list" の辞書を使用して、キー文字列 (例: 'host'、'hardware' など) に応じてそれらのリストに追加できます。

于 2013-06-18T01:34:38.037 に答える
0

フラグを使用してcurhost、辞書を作成することもできます。

with open("dhcpd.conf","r") as dhcp_file:
    curhost,hosts=None,{}
    for line in dhcp_file:
        if curhost and '}' in line: curhost=None
        if not curhost and re.search(r'^\s*host\b',line):
            curhost=re.split(r'\s+', line)[1]
            hosts[curhost] = dict()
        if curhost and 'hardware ethernet' in line:
            hosts[curhost]['ethernet'] = line.split()[-1]

print hosts
于 2013-06-18T01:34:14.973 に答える