Experiment Scripts

From SubfireWiki

Jump to: navigation, search

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)
Personal tools