3

我需要一些关于 python 脚本的帮助。我需要在 dhcpd 文件中搜索主机整体、它们的 MAC 和 IP,并将其打印在一行中。我能够找到主机名和 IP 地址,但无法弄清楚如何将变量从 if 语句中取出放在一行中。任何建议,代码如下:

#!/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() 以将它们全部打印在一行上:

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

在您的特定情况下,如何将相关条目添加到列表中,然后在最后打印该列表?

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

此时,您可能希望将您收集的“条目”加入到单个字符串中。如果是这样,您可以使用 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 回答