2015-01-23 2 views
0

У меня есть скрипт python 2.7 на Ubuntu 12.04, используя локальные команды Fabric, которые он получает из текстового файла. Когда я пытаюсь использовать однострочный вкладыш с полуколонами в нем, Fabric не разбирает строку и не разбивается. Есть ли синтаксис, который работает, или я должен искать в другом месте для запуска этой команды?Как Python печатать строку из файла конфигурации, содержащего полуколоны?

--------- редактировать -----------

более краткое изложение проблемы, чем фактическое одно первоначально включены. Речь идет не о ткани на всех, даже печать не будет работать с этим текстом в конфигурационном файле:

питон конфигурационный файл:

[firmware-jobs] 1: echo ".... ; ....." > /tmp/tmp-file

питон файл с Ткань:

from ConfigParser import SafeConfigParser confparser = SafeConfigParser() confparser.read(CONFFILE)

for (key, command) in CONFOBJ.items('firmware-jobs'): try: print command

------ конец редактировать -----------

if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi

Я попытался:

"if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi" 
if grep -q "CPLD " tmp-file '\;' then echo "y" | <some long command> '\;' fi 
if grep -q "CPLD " tmp-file ";" then echo "y" | <some long command> ";" fi 

типичный отказ:

[localhost] local: "if grep -q "CPLD " tmp-file 
/bin/sh: 1: Syntax error: Unterminated quoted string 

Fatal error: local() encountered an error (return code 2) while executing '"if grep -q "CPLD " tmp-file' 

требования:

Я не хочу, чтобы переместить условную в Python, так как текст файл поддерживает общий скрипт Python для разных аппаратных платформ ормы и выпуски.

ответ

2

Вам нужно использовать разные кавычки снаружи и внутри строки, иначе Python думает, что вы заканчиваете строку. Попробуйте это:

'if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi' 

Или, если вы также должны использовать одинарные кавычки внутри строки, это:

'''if grep -q "CPLD " tmp-file ; then echo "y" | <some long command> ; fi''' 

Python рассматривает тройные кавычки, чтобы быть отдельным видом цитаты из одинарных кавычек, и Безразлично 't заканчивает строку, пока не увидит другую тройную цитату. (Это также работает с """.)

+0

Nope Amber, не работает с тройными одинарными кавычками. Python читает это из текстового файла, он, кажется, входит в одну кавычку вокруг всего. Я попробовал две одиночные кавычки и три, и одинарные кавычки вокруг полуколоней ... –

+0

А, ладно. Вы пробовали сингл '\' перед точкой с запятой без кавычек? Если это не сработает, попробуйте ли вы двойную косую черту (\\;)? – Amber

+0

попытался: ''; ";'; \\; ';' '; с и без' 'вокруг цельной строки. –

0

Похоже, проблема связана с кавычками за пределами строки в команде, от которой вы хотели бы избавиться. Метод стрип строка будет делать это для вас:

command = command.strip(" '") 

Кроме того, палка с ответом Эмбер о том, как форматировать команду в целом, это выглядит правильно для меня.

И, наконец, попробуйте запустить команду непосредственно в оболочке, если она прекрасно работает, это должен быть формат, поданный в Fabric.

+0

Amber, Meridus Я отредактировал исходный отчет на более сжатом примере. –

+0

Meridus, с новым примером, вы могли бы объяснить, какие кавычки нужно удалить? –

+0

command = command.strip ("'") в коде python не работает. –

1

его ошибка в 2.7 ConfigParser

http://bugs.python.org/issue16374

с запятой рядный комментарий разделителей

Спасибо за предложения!

+0

Отличная находка! Если вы ищете альтернативы, вы можете использовать json или yaml. XML тоже популярен, но сложнее разобрать. – Meridius

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