using subprocess for non-terminating command

O.R.Senthil Kumaran orsenthil at users.sourceforge.net
Wed Jul 4 10:36:41 EDT 2007


* zacherates <zacherates at gmail.com> [2007-07-04 12:09:03]:

> > How should I handle these kind of commands (ping 127.0.0.1) with
> > subprocess module. I am using subprocess, instead of os.system because
> > at anypoint in time, I need access to stdout and stderr of execution.
> 
> Ping, for one, allows you to set an upper bound on how long it runs
> (the -c option).  This is probably the cleanest approach if it's
> available.
> 

Yes, I am aware of the ping -c option. But again even that does not help.
try
process = subprocess.Popen('ping -c 10 127.0.0.1', stdin=subprocess.PIPE,
shell=True)
process.stdout.read()  # This will hang again.

I am not sure, why subprocess is behaving so.

> You can also send the subprocess signals if you need it to exit
> (although, this is a unix thing so I'm not sure how portable it is).

Yes, I have tried to kill and then get the standard output result.
But the result has been the same. I could not read the Popen returned file
object.

> You could emulate having a timeout on child.stdout.read by registering
> a callback with Timer to kill the child.

I dont know how to do this. I shall give it a try ( by looking around ) and
trying. 

-- 
O.R.Senthil Kumaran
http://uthcode.sarovar.org



More information about the Python-list mailing list