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

use*_*836 2 python regex scripting

我需要一些python脚本的帮助.我需要在dhcpd文件中搜索主机entires,它们的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()
Run Code Online (Sandbox Code Playgroud)

sea*_*erd 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
Run Code Online (Sandbox Code Playgroud)


ste*_*ano 5

在一般情况下,您可以将逗号分隔的值提供给 print() 以将它们全部打印在一行上:

entries = ["192.168.1.1", "supercomputer"]
print "Host:", entries[0], "H/W:", entries[1]
Run Code Online (Sandbox Code Playgroud)

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

entries = []
...
entries.append(split[1])
...
print entries
Run Code Online (Sandbox Code Playgroud)

此时,您可能希望将收集到的“条目”合并为一个字符串。如果是这样,您可以使用 join() 方法(如 abarnert 所建议的):

print ' '.join(entries)
Run Code Online (Sandbox Code Playgroud)

或者,如果你想变得更有趣,你可以使用“字符串”的字典:“列表”并附加到这些列表,具体取决于它们的关键字符串(例如“主机”、“硬件”等...)