2013-06-20 3 views
0

У меня есть сценарий быстрой и грязной сборки, который должен обновить пару строк в небольшом конфигурационном файле xml. Поскольку файл настолько мал, я использую заведомо неэффективный процесс обновления файла на месте только, чтобы держать вещи простыми:Вставка XML-элемента с Python

def hide_osx_dock_icon(app): 
    for line in fileinput.input(os.path.join(app, 'Contents', 'Info.plist'), inplace=True): 
     line = re.sub(r'(<key>CFBundleDevelopmentRegion</key>)', '<key>LSUIElement</key><string>1</string>\g<1>', line.strip(), flags=re.IGNORECASE) 

    print line.strip() 

Идея заключается в том, чтобы найти <key>CFBundleDevelopmentRegion</key> текст и вставить LSUIElement содержимое прямо перед из этого. Я делаю что-то подобное в другой области, и он работает нормально, поэтому я думаю, что я просто что-то пропустил, но я этого не вижу.

Что я делаю неправильно?

+0

Вы печатаете последней строки, потому что строка 'print' не имеет отступов достаточно далеко. Это ошибка отправки? –

+0

Argh, no. Нет, это не ошибка. Ну, а не в сообщении. Это та часть, которую я просто не мог видеть. Если вы положите это в качестве ответа, я помету его как ответ. Спасибо за дополнительный набор глазных яблок. –

+0

Готово; там, сделано, резиновая утка знает все секреты и никому не говорит. –

ответ

0

Вы печатаете только последней линии, потому что ваше print заявление выходит за пределы для цикла:

for line in fileinput.input(os.path.join(app, 'Contents', 'Info.plist'), inplace=True): 
    line = re.sub(r'(<key>CFBundleDevelopmentRegion</key>)', '<key>LSUIElement</key><string>1</string>\g<1>', line.strip(), flags=re.IGNORECASE) 

print line.strip() 

отступа, что линия соответствует предыдущему:

for line in fileinput.input(os.path.join(app, 'Contents', 'Info.plist'), inplace=True): 
    line = re.sub(r'(<key>CFBundleDevelopmentRegion</key>)', '<key>LSUIElement</key><string>1</string>\g<1>', line.strip(), flags=re.IGNORECASE) 

    print line.strip() 
Смежные вопросы