2016-01-28 3 views
0

Моя идея - собрать все версии компонентов, установленные во всех разных лабораториях по всему миру. Мой код работает, когда я даю детали явно.Чтение всех разделов в файле конфигурации

Мой код выглядит следующим образом

def UK_PDL_HE(): 
    UK_PDL_List = {} 
    sorted_list = {} 
    slist = {} 
    HE_string = "UK_PDL_HE" 
    global config 
    config = ConfigParser.RawConfigParser() 
    print config.sections() 
    config.read('config.cfg') 
    env.user = config.get('UK_PDL','db.user_name') 
    env.password = config.get('UK_PDL','db.password') 
    host = config.get('UK_PDL','db.ip') 
    with settings(hide('warnings', 'running', 'stdout', 'stderr'), warn_only=True, host_string=host): 
    paramiko.util.log_to_file('UK_PDL.log') 
    files = run('ls -ltr /opt/nds') 
    with open("UK_PDL.txt", "w") as fo: 
     fo.write(files) 
    components = [] 
    with open("UK_PDL.txt", 'rb') as fo: 
     strings = ("/installed/") 
     i=0 
     for line in fo: 
      if strings in line: 
       id = re.search('installed/(.+)',line) 
       if id: 
       components.append(id.group(1)) 
       component,version = components[i].rstrip().split('-',1) 
       UK_PDL_List[component] = version 
       i+=1 
     write_data(UK_PDL_List, HE_string,1) 

конфигурационный файл выглядит следующим образом

[UK_PDL] 
db.user_name = user 
db.password = password 
db.ip = 101.815.117.193 

[UK_DTH] 
db.user_name = user 
db.password = password 
db.ip = 272.119.411.121 

В настоящее время я написал для функции для каждого IP. Вместо этого, как я могу убедиться, что все записи считываются из конфигурации по одному и извлекают детали?

+0

Я не совсем уверен, что вы просите ... вы просто хотите перебрать разделы конфигурационного файла, не зная названия разделов? – glibdud

+0

Да. Вместо того, чтобы давать имена, мне нужно указать цифры 1, 2 и т. Д. В config [заменяя UK_PDL & UK_DTH]. Если у меня 10 разделов, одна функция должна искать все 10 разделов в конфигурации и выводить данные. –

ответ

1

Вы можете цикл по разделам и создавать имена файлов динамически:

def any_HE(): 
    global config 
    config = ConfigParser.RawConfigParser() 
    config.read('config.cfg') 
    for section in config.sections(): 
     list = {} #start with empty list for each section 
     env.user = config.get(section, 'db.user_name') 
     env.password = config.get(section, 'db.password') 
     host = config.get(section, 'db.ip') 
     with settings(hide('warnings', 'running', 'stdout', 'stderr'), \ 
         warn_only=True, host_string=host): 
      paramiko.util.log_to_file(section + '.log') 
      files = run('ls -ltr /opt/nds') 
      with open(section + ".txt", "w") as fo: 
       fo.write(files) 
      components = [] 
      with open(section + ".txt", 'rb') as fo: 
       strings = ("/installed/") 
       i=0 
       for line in fo: 
        if strings in line: 
         id = re.search('installed/(.+)',line) 
         if id: 
          components.append(id.group(1)) 
          component,version = components[i].rstrip().split('-',1) 
          list[component] = version 
          i+=1 
      write_data(list, section + "_HE", 1) 

В некоторых местах отступы вашего кода казались неправильными, поэтому у меня было t o сделайте некоторые предположения.

+0

Отлично. Это сработало. –

1

Чтобы перебрать разделы в конфигурационном файле:

config = ConfigParser() 
config.read('config.cfg') 
for section in config.sections(): 
    print(section, dict(config[section])) 

Для доступа к разделу n я:

config[config.sections()[n]] 
+0

Я получаю сообщение об ошибке, когда я использую тот же раздел, что упоминалось выше. config = ConfigParser() TypeError: объект 'module' не может быть вызван –

+0

@Roshanr 'ConfigParser' здесь относится к классу, а не к модулю. Попробуйте 'ConfigParser.ConfigParser()' – glibdud

+0

Я пробовал этот config = ConfigParser.ConfigParser() для раздела в config.sections(): print (раздел, dict (config [section])), но получил/Library/Frameworks/Python .framework/Версии/2.7/bin/python2.7 /Users/roradhak/Work/Scripts/ComponentListing/build/lib/SSHCOnnect.py Процесс завершен с кодом выхода 0 в качестве вывода –

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