From SubfireWiki
client script
#!/usr/bin/env python
import time
import sys
import os
import pty
import tempfile
import signal
import stat
if len(sys.argv) < 2:
port = str(49989)
else:
port = sys.argv[1]
if len(sys.argv) < 3:
file = "largefile-64M.txt"
else:
file = sys.argv[2]
if len(sys.argv) < 4:
timeout = 600
else:
timeout = int(sys.argv[3])
tempdir = tempfile.mkdtemp()
outfile = tempdir+"/"+file
if not os.environ.has_key('GLOBUS_LOCATION'):
print "Set the GLOBUS_LOCATION environment variable"
sys.exit(1)
(pid, fd) = pty.fork()
if pid is 0:
os.execl(os.environ['GLOBUS_LOCATION']+"/bin/globus-url-copy", "globus-url-copy", "-v", "gsiftp://tahiti:"+port+"/home/head/"+file, "file:"+outfile)
else:
start = time.time()
i=0
while True:
#print 'waiting for',pid
status = os.waitpid(pid, os.WNOHANG)
#print "Exited?", os.WIFEXITED(status[0])
#print "Stopped?", os.WIFSTOPPED(status[0])
#print "Signaled?", os.WIFSIGNALED(status[0])
#print "Signal=", os.WSTOPSIG(status[0])
if not os.WIFEXITED(status[0]): # logic is backward?
stop = time.time()
delta_t = stop-start
bytes = os.stat(outfile)[stat.ST_SIZE]
print "TIME=%f s SIZE=%i bytes BW=%f bps" % (delta_t, bytes, (bytes/delta_t))
break
if i >= timeout:
#print "killing"
os.kill(pid, signal.SIGINT)
status = os.waitpid(pid, 0)
#print "Exited?", os.WIFEXITED(status[0])
#print "Stopped?", os.WIFSTOPPED(status[0])
#print "Signaled?", os.WIFSIGNALED(status[0])
#print "Signal=", os.WSTOPSIG(status[0])
print "TIMED OUT"
break
time.sleep(0.01)
i=i+1
try:
os.remove(outfile)
except OSError, error:
print error
os.removedirs(tempdir)