Piping stdout to Python callable

Edward Diener eldiener at earthlink.net
Tue Aug 17 21:08:06 EDT 2004


Antoon Pardon wrote:
> Op 2004-08-17, Edward Diener schreef <eldiener at 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.





More information about the Python-list mailing list