[Tutor] monitor subprocess and get it's output during execution

王珂 wkgogogo at gmail.com
Mon Sep 1 05:39:24 CEST 2008


Hi,

I have a python program needs to do some download task from file server to
local disk regularly.
I intend to call robocopy.exe (a download tool in windows) do the real
download job.

--Below codes works:
DownloadArgs = " \\servername\Sourcepath
<file://servername/Sourcepath>d:\destinationPath *.bin"
os.system("robocopy.exe" +" "+ "DownloadArgs")

But the problem is :
1.Program halt until this robocopy download complete.
  As the download will last 2~3hours, I want to do and display something
while downloading.
  Such as display a ">" each 10 seconds while downloading.

2.robocopy's output display in console.
  I want to hide robocopy's output, meanwhile get latest output each 10
secends then display only a portion of it.

--Then I use:
p = subprocess.Popen(["robocopy.exe" +" " + "DownloadArgs"],Shell =
True,stdout = PIPE)
p.communicate()

This can hide robocopy's output, but still can't display the download
process is going.

--Then I use:
print "Download begin ..."
 p = subprocess.Popen(["robocopy.exe" +" " + "DownloadArgs"],Shell =
True,stdout = PIPE)
while not str(p.poll()).isdigit():
    print ">",
    time.sleep(10)
    #don't know how to grab output and display portion of it
print "Download complete with retval (%d) "% (p.poll())

This will make robocopy never terminate, and display ">>>>>>" forever.

Any suggestion is welcome. Thanks in advance.

Regards,
Colin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20080901/b69bc7d2/attachment.htm>


More information about the Tutor mailing list