Running a program from another program.

Laurent Verweijen somelauw at gmail.com
Thu Jun 17 18:06:53 EDT 2010


Op donderdag 17-06-2010 om 14:48 uur [tijdzone -0700], schreef Stephen
Hansen: 
> On 6/17/10 2:40 PM, Laurent Verweijen wrote:
> > Op donderdag 17-06-2010 om 14:36 uur [tijdzone -0700], schreef Stephen
> > Hansen: 
> >> On 6/17/10 2:09 PM, Laurent Verweijen wrote:
> >>> It just gives me an empty string.
> >>>
> >>> Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
> >>> [GCC 4.4.3] on linux2
> >>> Type "help", "copyright", "credits" or "license" for more information.
> >>>>>> from asynchronous import *
> >>>>>> p = Popen(["python", "increment.py"], stdin=PIPE, stdout=PIPE)
> >>>>>> send_all(p, "5\n")
> >>>>>> recv_some(p)
> >>> ''
> >>>>>> send_all(p, "6\n")
> >>>>>> recv_some(p)
> >>> ''
> >>
> >> Yes, that's how it signals the same situation. The point is: your
> >> subprocess isn't outputting anything. You sure its not crashing out, for
> >> instance?
> >>
> > 
> > No, since it responds to the keyboard:
> 
> That doesn't really prove the point. There's all kinds of things that
> can go wrong when you switch how you run a program.
> 
> Wrap your increment.py in like:
> 
> import sys
> import traceback
> 
> try:
>    ...
> except:
>    print >>sys.stderr, traceback.format_exc()
> 
> Then add the arg in your Popen, stderr=sys.stderr
> 
> And see if any exception is thrown.
> 
> The original error you got, and the empty string from the recipe, both
> mean interpret.py is not returning any output. Why? Maybe its erroring
> out-- the subprocess context is different then the context of running a
> program from the keyboard. Or maybe you're not sending:

I did exactly what you said, here is the result:

prompt:~$ python subchronous_test.py




Traceback (most recent call last):
  File "increment.py", line 7, in <module>
    n = int(raw_input(str(n))) + 1
EOFError: EOF when reading a line

prompt$ close failed in file object destructor:
Error in sys.excepthook:

Original exception was:

> 
> In your other thread you include an actual traceback:
> 
> Traceback (most recent call last):
>   File "subchronous_test.py", line 5, in <module>
>     send_all(str(p), n)
>   File "/home/Somelauw/asynchronous.py", line 145, in send_all
>     while len(data):
> TypeError: object of type 'int' has no len()
> 
> The first argumetn to send_all should be the actual Popen subclass. The
> second should be a string to send. I think that line really is intended
> to be:
> 
> send_all(p, str(n)) # assuming 'n' is say, the number 5.
> 

You are right, I swapped the parameters, but even if I correct it, it
still gives the second error.




More information about the Python-list mailing list