Source code for issm.issmscpin

from socket import gethostname
import subprocess
import os
import shutil
import MatlabFuncs as m

[docs]def issmscpin(host, login,port,path, packages): """ ISSMSCPIN get packages from host, using scp on unix, and pscp on windows usage: issmscpin(host,packages,path) """ #first get hostname hostname=gethostname() #first be sure packages are not in the current directory, this could conflict with pscp on windows. #remove warnings in case the files do not exist for package in packages: try: os.remove(package) except OSError as e: pass #if hostname and host are the same, do a simple copy if m.strcmpi(hostname,host): for package in packages: try: shutil.copy(os.path.join(path,package),os.getcwd()) #keep going, even if success=0 except OSError as e: pass else: if m.ispc(): #use the putty project pscp.exe: it should be in the path. #get ISSM_DIR variable if 'ISSM_DIR_WIN' in os.environ: ISSM_DIR=os.environ['ISSM_DIR_WIN'][1:-2] else: raise OSError("issmscpin error message: could not find ISSM_DIR_WIN environment variable.") username=raw_input('Username: (quoted string) ') key=raw_input('Key: (quoted string) ') for package in packages: try: subprocess.check_call('%s/externalpackages/ssh/pscp.exe -l "%s" -pw "%s" %s:%s %s' % (ISSM_DIR,username,key,host,os.path.join(path,package),os.getcwd()),shell=True) except CalledProcessError as e: raise CalledProcessError("issmscpin error message: could not call putty pscp.") else: #just use standard unix scp #string to copy multiple files using scp: string='\{'+','.join([str(x) for x in packages])+'\}' if port: subprocess.call('scp -P %d %s@localhost:%s %s/. ' % (port,login,os.path.join(path,string),os.getcwd()),shell=True) else: subprocess.call('scp %s@%s:%s %s/.' % (login,host,os.path.join(path,string),os.getcwd()),shell=True) #check scp worked for package in packages: if not os.path.exists(os.path.join('.',package)): raise OSError("issmscpin error message: could not call scp on *nix system.")