подпроцесс python.Popen - PullRequest
       4

подпроцесс python.Popen

2 голосов
/ 22 июня 2011

Мне трудно понять, как заставить python вызывать системную команду с помощью функции subprocess.Popen.

the_file = ('logs/consolidated.log.gz')         
webstuff = subprocess.Popen(['/usr/bin/zgrep', '/meatsauce/', the_file ],stdout=subprocess.PIPE)
  for line in webstuff.stdout:
    print line

Пытается заставить python создать другой файл с моей строкой поиска.

Ответы [ 4 ]

2 голосов
/ 22 июня 2011

Не совсем уверен в вашем вопросе, но следующий фрагмент вызовет zgrep с двумя аргументами, searchterm и именем файла - и выведите результат (stdout) построчно:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import subprocess

# filename and searchterm
fn, term = 'access_log.gz', 'hello'
p = subprocess.Popen(['/usr/bin/zgrep', term, fn], stdout=subprocess.PIPE)
for line in p.stdout:
    print line

В коде, который вы разместили, интерполяция строк (% dpt_search) не работает, так как перед знаком по модулю нет чистой строки - на самом деле она должна завершиться ошибкой, например:

TypeError: "unsupported operand type(s) for %: 'Popen' and 'str'"

2 голосов
/ 22 июня 2011

Проблема в том, как вы строите свои аргументы.То, как у вас это сейчас, вы бежите:

/usr/bin/zgrep /meatsauce/ logs/consolidated.log.gz

Обратите внимание на пробел между /meatsauce/ и logs ...

Я думаю, что вы собираетесь, используйте os.path.join a la:

import os

the_file = 'logs/consolidated.log.gz'         
webstuff = subprocess.Popen(['/usr/bin/zgrep', os.path.join('/meatsauce/', the_file)],stdout=subprocess.PIPE) % dpt_search
    for line in webstuff.stdout:
        print line
1 голос
/ 22 июня 2011
the_file = ('webalizerlogs/consolidated.log.gz')
output_f = open('output.txt','w')
webstuff = subprocess.Popen(['/usr/bin/zgrep', dpt_search, the_file ],stdout=output_f)
0 голосов
/ 22 июня 2011

Я думаю, вы просто пытаетесь найти содержимое файла.

import os
import subprocess
the_file = os.path.join(os.getcwd(),'logs/consolidated.log.gz')
proc = subprocess.Popen(['/usr/bin/zgrep', dpt_search, the_file], stdout=subprocess.PIPE)
out, err = proc.communicate()
with open('resultoutput','w') as f:
     f.write(out)
subprocess.call(['/usr/bin/zip',os.path.join(os.getcwd(),'resultoutput'])

Проверьте также документы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...