使用python在一行中打印多个变量

2024-05-16 00:07:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要一些关于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()

Tags: importipre脚本forsearchifsys
3条回答

在一般情况下,可以给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”等)

你可以用很多方法来解决这个问题。最简单的方法可能是在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

您还可以使用标志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

相关问题 更多 >