Very odd output from subprocess

m mtigges at gmail.com
Thu Jul 1 00:12:12 EDT 2010


I have this function:


def GetMakeOutput(make, rules, out=None):
    p = subprocess.Popen('%s %s' % (make,rules),
                         shell=True,
                         bufsize=1024,
                         stderr=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         close_fds=False)
    ret = []
    line = p.stdout.readline()
    while len(line):
        if line[:5] not in ['make[','make:']:
            if out:
                out.write(line)
                out.flush()
            else:
                ret.append(line)
        line = p.stdout.readline()
    return string.join(map(string.strip,ret),'\n')

Very simple ... it cleans any line that is output from make itself.

Now, I have used it for quite awhile with no problem.  But, I noticed
today that it wasn't doing its job on my 64 bit machine.

If I add the line:
     for l in line: print ord(l),'\t',l
after the first readline, I get the following:


27 	
91 	[
48 	0
48 	0
109 	m
27 	
91 	[
51 	3
55 	7
109 	m

before the codes begin for the string as it appears if I just print
it.  So, what is this sequence?  They seem like some sort of escape
codes, I've never seen this before at all.

Can anyone enlighten me as to what is going on?

And, can I safely strip sets of 5 characters from the front as long as
they start with Escape (27)?

Thanks,

Mark.



More information about the Python-list mailing list