2013-06-18 3 views
1

Мне нужна помощь с помощью скрипта python. Мне нужно найти файл dhcpd для хоста, его MAC и IP, и распечатать его в одной строке. Я могу найти имя хоста и IP-адрес, но не могу понять, как заставить переменные из оператора if помещаться в одну строку. Любые предложения, код ниже:Печать нескольких переменных в одной строке с использованием python

#!/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() 
+1

Абсолютный _simplest_ способ сделать это - положить ',' в конце каждого выражения 'print' (а затем добавить в конце голый оператор 'print'). Однако ответы ниже намного лучше - стоит изучить разные способы накопления ценностей, потому что вам часто приходится делать больше, чем просто распечатывать их. – abarnert

ответ

7

Существует несколько способов, которыми вы могли бы воспользоваться этим. Простейшим, вероятно, является инициализация пустой строки перед операторами 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 
+0

Я попробовал ваше решение, но все же получил результаты на разных линиях. результаты: хост хост IP адрес пытается получить как на одной и той же линии – user2472836

+0

@ user2472836: Вам просто нужно переместить 'printstr =«»' 'и в печати printstr' вне' for' цикла, если вы требуется одна строка для всех записей вместо одной строки для каждой записи. – abarnert

+0

безупречный тот сделал. большое спасибо! @seaotternerd – user2472836

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 
4

В общем случае, вы можете дать запятую значения для печати(), чтобы напечатать их все в одной строке:

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) 

Или, если вы хотите получить новые идеи, вы могли бы использовать словарь «строка»: «список» и добавить к эти списки, в зависимости от их ключевой строки (например, «хост», «оборудование» и т. д.)

+0

Хороший ответ, потому что он держит вещи простыми, но объясняет, как OP может расширяться на нем. (Возможно, стоит упомянуть метод 'join'.) – abarnert

+0

Спасибо. Да, это может быть полезно - я добавил. Приветствия. – stefano

Смежные вопросы