开发者

python subprocess.Popen

I am having a difficult time understand开发者_高级运维ing how to get python to call a system command with the subprocess.Popen function.

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

Trying to get python to build another file with my search string.


The problem is in how you're constructing your arguments. The way you have it now, you're running:

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

Note the space between /meatsauce/ and logs...

To do what I think you're intending, use 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


Not exactly sure about your question, but the following snippet will call zgrep with two arguments, a searchterm and a filename - and print the result (stdout) line by line:

#!/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

In the code you posted the string interpolation (% dpt_search) does not work out, since there is not pure string in front of the modulo sign - in fact it should fail with something like:

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


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)


I think you are simply trying to grep the a content in the a file. Is it?

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'])

Check the docs as well.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜