467,921 Members | 1,319 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,921 developers. It's quick & easy.

Asychronous execution *with* return codes?

I hope I have not overlooked a solution already posted, but I seem to
be unable to suss out a way to achieve both multiple console-less
executions of a given (console) application and gathering the return
code from the application.

What I have found:
<code>
import subprocess

# gives back return code, but does not run asynchronously
retcode = subprocess.call([app, lstArgs])
retcode = subprocess.Popen([app] + lstArgs).wait()
# runs the app async, but only returns the pid (no return code)
pid = subprocess.Popen([app] + lstArgs).pid
</code>

Is there some magic elixir which will get me both?

TIA

Oct 5 '06 #1
  • viewed: 1421
Share:
8 Replies
utabintarbo wrote:
pid = subprocess.Popen([app] + lstArgs).pid
Check out the poll() method and the returncode attribute:
http://docs.python.org/lib/node533.html

Regards,
Jordan

Oct 5 '06 #2

MonkeeSage wrote:
utabintarbo wrote:
pid = subprocess.Popen([app] + lstArgs).pid

Check out the poll() method and the returncode attribute:
http://docs.python.org/lib/node533.html
Thanks for the reply.

If I understand your meaning, I should do something like this (given I
wish to run an app against several arguments [my use case]):

for lstArgs in pileOflstArgs:
uniqueProcessID = subprocess.Popen([app] + lstArgs)
pid = uniqueProcessID.pid
retcode = uniqueProcessID.poll()
# increment uniqueProcessID
....

If so, how do I handle the poll() on long-running processes? Run a
bunch and then start a check loop? Am I asking too many questions?

Oct 5 '06 #3
If you're on a POSIX system, you could use the usual fork/exec/wait:

import os
for lstArgs in pileOflstArgs:
pid = os.fork()
if not pid:
os.execv( app, lstArgs )

for i in range(len(pileOflstArgs)):
pid, status = os.wait()

Of couse, os.wait() will block until a child exits. Look at the docs
for the status code it returns, though, as it's not just the return
value of the process.

On Oct 5, 7:43 am, "utabintarbo" <utabinta...@gmail.comwrote:
MonkeeSage wrote:
utabintarbo wrote:
pid = subprocess.Popen([app] + lstArgs).pid
Check out the poll() method and the returncode attribute:
http://docs.python.org/lib/node533.htmlThanks for the reply.

If I understand your meaning, I should do something like this (given I
wish to run an app against several arguments [my use case]):

for lstArgs in pileOflstArgs:
uniqueProcessID = subprocess.Popen([app] + lstArgs)
pid = uniqueProcessID.pid
retcode = uniqueProcessID.poll()
# increment uniqueProcessID
....

If so, how do I handle the poll() on long-running processes? Run a
bunch and then start a check loop? Am I asking too many questions?
Oct 5 '06 #4

Justin wrote:
If you're on a POSIX system, you could use the usual fork/exec/wait:
Sorry. Win32. We are only allowed spoons - no sharp objects. :-P

Oct 5 '06 #5
At Thursday 5/10/2006 09:33, utabintarbo wrote:
># gives back return code, but does not run asynchronously
retcode = subprocess.call([app, lstArgs])
retcode = subprocess.Popen([app] + lstArgs).wait()
# runs the app async, but only returns the pid (no return code)
pid = subprocess.Popen([app] + lstArgs).pid
</code>

Is there some magic elixir which will get me both?
Use the async way, and then, os.waitpid()

Gabriel Genellina
Softlab SRL

__________________________________________________
Preguntá. Respondé. Descubrí.
Todo lo que querías saber, y lo que ni imaginabas,
está en Yahoo! Respuestas (Beta).
¡Probalo ya!
http://www.yahoo.com.ar/respuestas

Oct 5 '06 #6
In message <11**********************@e3g2000cwe.googlegroups. com>,
utabintarbo wrote:
Justin wrote:
>If you're on a POSIX system, you could use the usual fork/exec/wait:
Sorry. Win32. We are only allowed spoons - no sharp objects. :-P
How about installing Cygwin, then, and running under that?
Oct 9 '06 #7
utabintarbo wrote:
If so, how do I handle the poll() on long-running processes? Run a
bunch and then start a check loop?
or use a thread to keep track of each external process.

</F>
Oct 9 '06 #8

Fredrik Lundh wrote:
utabintarbo wrote:
If so, how do I handle the poll() on long-running processes? Run a
bunch and then start a check loop?

or use a thread to keep track of each external process.

</F>
This sounds most promising. Might you have a code snippet (or link to
same) illustrating this?

Oct 11 '06 #9

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by satish | last post: by
1 post views Thread by Raquel | last post: by
3 posts views Thread by c# beginner | last post: by
1 post views Thread by SenthilVel | last post: by
7 posts views Thread by archana | last post: by
2 posts views Thread by William Johnston | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.