2013-09-18 2 views
0

Я пытаюсь разобрать набор регулярных выражений с помощью команды pcregrep. Эта команда будет выполнена из python, а выход будет отформатирован и сохранен в структурах данных python. Я в состоянии выполнить все регулярные выражения, кроме внизу одинНевозможно понять код возврата pcregrep при выполнении из сценария python

"^.{159}-{51}\s*\n.{159}Attempting to start (?:ORM(R)?|CPS) channel\s*\n.*in\s*\n.*init_n_config\s*\n.*H_ICM_C_MCC_CHANNEL_MANAGER\.C\s*\n.*at line\s*\n.*\d+\s*$" 

Я печатая код ошибки и вместе с сообщением я получаю, выполнив команду pcregrep из питона.

Я получаю код ошибки как 256 и пустое сообщение Я использую утилиту команд python. Я печатаю cmd_output [0] (для кода возврата) и command_output [1] (для сообщения об ошибке) Я попытался выполнить это из командной строки, и он отлично работает. Он печатает все соответствующие строки, соответствующие указанному выше регулярному выражению.

Есть что-то упущенное здесь. Только указанное выше регулярное выражение дает ошибку. Остальные выражения работают абсолютно нормально.

+0

Помогло бы, если бы вы могли добавить фрагмент кода, который вы используете для выполнения этого регулярного выражения. – Jerry

ответ

0

Код возврата 256 (при использовании его с помощью методов вызова подпроцессов Python различного типа) может означать, что подпроцесс, как правило, выходил с кодом выхода 1, который для grep означает, что он ничего не нашел. Таким образом, это может быть не ошибка, а просто отказ найти нужное регулярное выражение.

Теперь это регулярное выражение содержит несколько специальных символов, таких как звездочки и обратные косые черты. Есть много способов передать это неправильно, чтобы они интерпретировались и, таким образом, были нарушены в процессе. Я бы предложил взглянуть на эти вопросы.

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

+0

Спасибо за информацию. BUt, что странно, прекрасно работает, то есть отображает соответствующие строки, когда они выполняются через командную строку. К сожалению, я не могу отправить вам строки, которые я пытаюсь сопоставить. Потому что у них есть путь к нашему исходному коду и т. Д. – suresh

+0

Тогда, вероятно, у вас есть ошибка в том, как передается командная строка в 'pcregrep'. Скорее всего, речь идет о цитировании. Возможно, вы захотите вызвать небольшой скрипт оболочки вместо 'pcregrep', чтобы узнать, что происходит с актом. В этом сценарии оболочки вы можете сделать это: 'for i; do printf "% q \ n" "$ i"; сделано>/tmp/bla'. Затем посмотрите на '/ tmp/bla', чтобы увидеть все переданные аргументы. – Alfe

+0

Я уже печатаю его в своем коде перед его исполнением. Трассировка - «Ошибка при проверке». {159} - {51} \ s * \ n. {159} Попытка запуска (?: ORM (R)? | CPS) канала \ s * \ n. * В \ s * \ n. * init_n_config \ s * \ n. * H_ICM_C_MCC_CHANNEL_MANAGER \ .C \ s * \ n. * в строке \ s * \ n. * \ d + \ s * $ " Ошибка при выполнении команды pcregrep и error is Ошибка при выполнении команды pcregrep и код 256 «Я взял текст из трассы, и я вручную выполнил команду из командной строки, и он работает, т. е. регулярное выражение, переданное из python в pcregrep, отлично работает через командную строку – suresh

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