2012-10-11 3 views
1

Мне нужно найти такую ​​строку Job 'Initialize' completed successfully и запустить эту команду из python.grep с кавычками

поэтому оболочка grep -c "Job 'Initialize' completed" 1.log отлично работает, но как эта команда будет выглядеть в python? cmd = """grep -c "Job 'Initialize' completed" 1.log"""?

+0

, что вы пытаетесь сделать с ЦМД в Python? – iruvar

+0

@Francheska - Вы должны заметить, что вы не создаете оболочку и не выполняете команду 'grep' напрямую (на основе последних комментариев). –

ответ

3

Это легко сделать с помощью подпроцесса:

subprocess.call(['grep','-c',"Job 'Initialize' completed", '1.log']) 
+0

Я согласен, это лучший способ - но у меня есть функция exteranl, выполняющая команды ssh и ожидающая cmd быть строкой – Francheska

3

Если вы хотите использовать Python, а затем использовать Python:

with open('1.log') as f: 
    count = 0 
    for line in f: 
     if "Job 'Initialize' completed" in line: 
      count += 1 
print "Count: {}".format(count) 

или

команды
with open('1.log') as f: 
    count = sum(1 for line in f if "Job 'Initialize' completed" in line) 
print "Count: {}".format(count) 
+0

Мне это больше чем вызов 'grep', но для огромных файлов' grep' обычно значительно быстрее, чем код Python, подобный этому. – piokuc

+0

1.log находится на удаленном хосте - я думал, что мне нужно использовать ssh? – Francheska

0

оболочки могут быть выполнены as-in в python с тройным цитированием и передачей shell = True на subprocess.call. Обратите внимание, что в документации «Вызов системной оболочки с оболочкой = True может представлять опасность для безопасности, если в сочетании с ненадежными данными»

subprocess.call(''' grep -c "Job 'Initialize' completed" 1.log ''', shell=True) 
Смежные вопросы