开发者

python subprocess.Popen

开发者 https://www.devze.com 2023-03-14 07:35 出处:网络
I am having a difficult time understand开发者_高级运维ing how to get python to call a system command with the subprocess.Popen function.

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

精彩评论

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