By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
438,428 Members | 1,340 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 438,428 IT Pros & Developers. It's quick & easy.

Asychronous execution *with* return codes?

P: n/a
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
Share this Question
Share on Google+
8 Replies


P: n/a
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

P: n/a

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

P: n/a
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

P: n/a

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

P: n/a
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

P: n/a
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

P: n/a
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

P: n/a

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.