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. 7 2695
Op 2004-08-17, Edward Diener schreef <el******@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?
What bothers you with twice invoking the interpreter? In these days
a program that is invoked multiples times will generally be only
loaded once in memory.
Are threads an acceptable alternative? Does your MyOwnModule.py needs
to write to stdout?
--
Antoon Pardon
Antoon Pardon wrote: Op 2004-08-17, Edward Diener schreef <el******@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.
Edward Diener wrote: Antoon Pardon wrote:
Op 2004-08-17, Edward Diener schreef <el******@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.
You could do something like this:
$ cat A.py
def test(arg):
for i in range(1,5):
print arg*i
$ cat B.py
import A
import sys
import StringIO
sys.stdout = StringIO.StringIO()
A.test(5)
fileobj,sys.stdout = sys.stdout,sys.__stdout__
fileobj.seek(0)
for line in fileobj:
print line.strip()
Worth the effort to change your code? Probably not. Kinda neat, though.
Rich
Rich Krauter wrote: [silly post snipped]
Oh, duh. You you said you need to invoke the code in the
if __name__ == '__main__': part of the code. Sorry, I saw your post
yesterday and didn't register that then. Obviously my suggestion doesn't
help you.
Well, unless A.py looks something like
def main():
...
...
if __name__ == '__main__:
main()
Rich
Op 2004-08-18, Edward Diener schreef <el******@earthlink.net>: Antoon Pardon wrote: Op 2004-08-17, Edward Diener schreef <el******@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.
That depends on the O.S. It is possible the O.S. notices that an
invoked program is already loaded en uses the same code-segment
in memory for following invocations. 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.
Then I fear there is no other solution. As far as I understand, you
can't redirect standard output on a per thread basis, (at least not
in python.) That means that if you redirect stdout of the A.py module
to go into a pipe, the stdout of MyOwnModule.py will go into the
same pipe. I don't think you want that.
--
Antoon Pardon
Antoon Pardon wrote: Op 2004-08-18, Edward Diener schreef <el******@earthlink.net>: Antoon Pardon wrote: Op 2004-08-17, Edward Diener schreef <el******@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.
That depends on the O.S. It is possible the O.S. notices that an invoked program is already loaded en uses the same code-segment in memory for following invocations.
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.
Then I fear there is no other solution. As far as I understand, you can't redirect standard output on a per thread basis, (at least not in python.) That means that if you redirect stdout of the A.py module to go into a pipe, the stdout of MyOwnModule.py will go into the same pipe. I don't think you want that.
Just wanted to write that someone else pointed out to me os.popen("python
A.py") and that did work well as an alternative to using os.system(etc.) .
Nonetheless thanks for your help. I mentioned this so that you would know
also know about it yourself if you hadn't encountered it.
Op 2004-08-19, Edward Diener schreef <el******@earthlink.net>: Antoon Pardon wrote: Then I fear there is no other solution. As far as I understand, you can't redirect standard output on a per thread basis, (at least not in python.) That means that if you redirect stdout of the A.py module to go into a pipe, the stdout of MyOwnModule.py will go into the same pipe. I don't think you want that.
Just wanted to write that someone else pointed out to me os.popen("python A.py") and that did work well as an alternative to using os.system(etc.) . Nonetheless thanks for your help. I mentioned this so that you would know also know about it yourself if you hadn't encountered it.
I know about popen, but that didn't seem to resolve your concern.
Working with popen will result in launching a second interpreter.
Since one of your mayor concerns about your own solution was
having two interpreters running, I didn't thought popen was a
viable solution.
--
Antoon Pardon This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: Christian Long |
last post by:
Hi
I'm trying to pipe data into a python program on Windows 2000, on the
command line.
Like this:
dir | myProgram.py
Here's what I tried:
|
by: Csaba Henk |
last post by:
For me, one reason for using Python is that with the help of it
I can rid of several problems that I faced with during writing scripts
in Bourneish...
|
by: Apple Grew |
last post by:
I want to develope a Winboard like application which will support
Winboard protocol. For that I require to know how to handle piping in
Python. I...
|
by: mhenry1384 |
last post by:
On WinXP, I am doing this
nant.exe | python MyFilter.py
This command always returns 0 (success) because MyFilter.py always
succeeds.
...
|
by: lechequier |
last post by:
Let's say I define a list of pairs as follows:
>>l =
Can anyone explain why this does not work?
>>h = {}.update(l)
and instead I have to go:...
|
by: Andy Leszczynski |
last post by:
I have got following program:
import sys
import binascii
from string import *
sys.stdout.write(binascii.unhexlify("41410A4141"))
when I...
|
by: mystilleef |
last post by:
Hello,
What is the Pythonic way of implementing getters and setters. I've
heard
people say the use of accessors is not Pythonic. But why? And...
|
by: James McGill |
last post by:
Hi All,
I'm using subprocess.Popen to run a C++ compiler and have set stdout =
PIPE. The exact line of code that I am using is:
process =...
|
by: Kemmylinns12 |
last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
|
by: jalbright99669 |
last post by:
Am having a bit of a time with URL Rewrite. I need to incorporate http to https redirect with a reverse proxy. I have the URL Rewrite rules made...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was...
|
by: Matthew3360 |
last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function.
Here is my code.
...
|
by: AndyPSV |
last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...
|
by: WisdomUfot |
last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
|
by: Oralloy |
last post by:
Hello Folks,
I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA.
My problem (spelled failure) is with the...
|
by: Carina712 |
last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand....
| |