Print results from multiple "if" statements in one line

Question:

I need to search a dhcpd file for host entires, their MAC and IP, and print it in one line. I am able to locate the hostname and IP address but cannot figure out how to get the variables out of the if statement to put in one line.

The code is below:

#!/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'bhostb',line):
            split = re.split(r's+', line)
            print split[1]
        if re.search(r'bhardware ethernetb',line):
            ip = re.split(r's+',line)
            print ip[2]
    dhcp_file.close()
Asked By: user2472836

||

Answers:

There are a number of ways that you could go about this. The simplest is probably to initialize an empty string before the if statements. Then, instead of printing split[1] and ip[2], concatenate them to the empty string and print that afterwards. So it would look something like this:

    printstr = ""
    if re.search...
        ...
        printstr += "Label for first item " + split[1] + ", "
    if re.search...
        ...
        printstr += "Label for second item " + ip[2]
    print printstr
Answered By: seaotternerd

You can also use a flag, curhost, and populate a dictionary:

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*hostb',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
Answered By: perreal

In the general case, you can give comma-separated values to print() to print them all on one line:

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

In your particular case, how about adding the relevant entries to a list and then printing that list at the end?

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

At this point you may want to join the ‘entries’ you’ve collected into a single string. If so, you can use the join() method (as suggested by abarnert):

print ' '.join(entries)

Or, if you want to get fancier, you could use a dictionary of “string”: “list” and append to those lists, depending on they key string (eg. ‘host’, ‘hardware’, etc…)

Answered By: stefano
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.