Re: Piping stdout to Python callable

From: Edward Diener (eldiener_at_earthlink.net)
Date: 08/18/04


Date: Wed, 18 Aug 2004 01:08:06 GMT

Antoon Pardon wrote:
> Op 2004-08-17, Edward Diener schreef <eldiener@earthlink.net>:
>> From within a function in my own module I need to take the output
>> from a Python module "A", which is sending data to stdout and which
>> can not be changed and which I need to invoke as a top-level module,
>> and pipe it into another function in my own module so that I can
>> read it from stdin. Is there an easy way to do this ? The only way I
>> can presently think to do this is through "system python A.py |
>> python MyOwnModule.py", which seems a bit laborious having to invoke
>> python.exe itself twice. Any other solution would be most welcome.
>
> What do you mean when you say you need to invoke it as a top-level
> module? Do you mean you can't import it at all or that importing it
> will startup the process of generating output immediatly?

I mean that it has a "if __name__ == '__main__' line and I need to trigger
it by calling 'python A.py'.

>
> What bothers you with twice invoking the interpreter?

Nothing practically. Just seems inelegant.

> In these days
> a program that is invoked multiples times will generally be only
> loaded once in memory.

Shared libraries may be loaded once in memory but python.exe itself gets
reloaded each time.

>
> Are threads an acceptable alternative? Does your MyOwnModule.py needs
> to write to stdout?

Threads are acceptable. MyOwnModule.py can do anything, depending on
parameters, but the idea is that a certain parameter tells it to read from
stdin on the other end of the pipe.

I have implemented this via "os.system("python A.py | python MyOwnModule.py
parameters") and it works fine. I thought there might be a better, more
elegant way but since the above works without any problem I will stick to it
unless you can suggest anything better. BTW "A.py" can be any number of
types of modules which must be invoked by python.exe and writes it's results
to stdout. I am telling you this lest you suggest that I somehow import and
parse A.py in order to call directly into it rather than having python.exe
invoke it. While that might be possible, it would be a real programming
PITA.



Relevant Pages

  • Re: Piping stdout to Python callable
    ... >> loaded once in memory. ... > stdin on the other end of the pipe. ... That means that if you redirect stdout of the A.py module ... Antoon Pardon ...
    (comp.lang.python)
  • Re: Piping stdout to Python callable
    ... >>loaded once in memory. ... > to stdout. ... > invoke it. ... $ cat A.py ...
    (comp.lang.python)
  • Re: Any way to capture stdcout output to memory?
    ... I am calling C library functions that want to output to stdout. ... need to capture this to memory for use internally inside the program ... Surely this sounds like a job for a pipe? ...
    (comp.lang.c)
  • Re: linux performance puzzle
    ... program that writes 100000 lines into stdout, and pipe its ... Anyway, for your two program to be loaded and executed, memory is needed. ... If you would *compile* the program twice, ...
    (comp.unix.programmer)
  • Re: Exchange store event sink
    ... This is because the .NET GC actually stops all .NET processes ... are new in memory will have a shorter lifetime than objects that are ... you need not worry about Exchange invoking the Dispose() method. ... to invoke the Deactivatemethod. ...
    (microsoft.public.exchange.development)