How to run an EXE, with argument, capture output value

noydb noydb00 at gmail.com
Fri Nov 19 00:28:18 CET 2010


On Nov 18, 6:20 pm, noydb <noyd... at gmail.com> wrote:
> On Nov 18, 5:54 pm, noydb <noyd... at gmail.com> wrote:
>
>
>
>
>
> > On Nov 18, 5:22 pm, Tim Harig <user... at ilthio.net> wrote:
>
> > > On 2010-11-18, noydb <jenn.du... at gmail.com> wrote:
>
> > > > import subprocess
> > > > pig = subprocess.Popen(["C:\Halls\hallbig2.exe"],
> > > > stdin=subprocess.PIPE, stdout=subprocess.PIPE)
> > > > result = pig.communicate(input='C:\Halls\Input\Ea39j.txt')[-1] #I need
> > > > to capture the, what I think is the, last output
>
> > > From the subprocess documentation:
>
> > >            [62]communicate() returns a tuple (stdoutdata, stderrdata).
> > >            Note that if you want to send data to the process's stdin,
> > >            you need to create the Popen object with stdin=PIPE. Similarly,
> > >            to get anything other than None in the result tuple, you need
> > >            to give stdout=PIPE and/or stderr=PIPE too.
>
> > > By using index [-1] you are accessing the processes stderr stream.  I am
> > > not really sure why you changed it.  It doesn't give you the last output.
> > > Index 0 gives you *all* of stdout and index 1 gives you *all* of stderr,
> > > period.  If you wish to further disect the output to get say the last line,
> > > then you will need to parse it separately.
>
> > Okay, I see now.  I did run it to start with 0 -- still same result no
> > matter if 0 or -1.
> > So, what is result (stdout, using [0]) in this case?  (yes, i know I
> > sound dumb - programming is not my background, obviously).  A list,
> > tuple???  How do you access stdout (or is it stdoutdata?) results?  I
> > have tried, get errors with all attempts.  The exe gui returns several
> > statistical values uopn inputing a text file (containing numerous
> > lines of <value> <frequency>) and clicking compute - I want just one
> > of the values.
>
> > > > print result
> > > > print pig.returncode
> > > >>> None
> > > >>> 0
>
> > > > So the tuple is empty. ??  The exe executes fine and returns output in
> > > > th exe tool itself.  The python script seems to execute fine, no
> > > > errors, '...returned exit code 0'.  Any ideas/suggestions?
>
> > > No the tuple contains two items (stdout, stderr).  The first is what the
> > > program printed to its stdout stream (which is most likely the output you
> > > see if you run the command at a terminal/console).  The second is what it printed to its
> > > stderr stream which is a channel used for out of band data such as error or
> > > status messages.  In this case, it is None, because you did open stderr as a
> > > subprocess.PIPE.- Hide quoted text -
>
> > - Show quoted text -- Hide quoted text -
>
> > - Show quoted text -
>
> stdout is a file object- Hide quoted text -
>
> - Show quoted text -

if I do
>>> print pig.communicate()
('', None)

Doesn't that mean it is empty?



More information about the Python-list mailing list