Source code for seisflows.tools.unix


import os
import shutil
import socket
import subprocess
import sys

from os.path import abspath, basename, isdir, isfile, join


[docs]def cat(src, *dst): f = open(src, 'r') contents = f.read() f.close() if not dst: print contents else: f = open(dst, 'w') f.write(contents) f.close()
[docs]def cd(path): os.chdir(path)
[docs]def cp(src='', dst=''): if isinstance(src, (list, tuple)): if len(src) > 1: assert isdir(dst) for sub in src: cp(sub, dst) return if isdir(dst): dst = join(dst, basename(src)) if isdir(dst): for sub in ls(src): cp(join(src, sub), dst) return if isfile(src): shutil.copy(src, dst) elif isdir(src): shutil.copytree(src, dst)
[docs]def ln(src, dst): dst = abspath(dst) if os.path.isdir(dst): for name in _strlist(src): s = abspath(name) d = join(dst, basename(name)) os.symlink(s, d) else: os.symlink(src, dst)
[docs]def ls(path): dirs = os.listdir(path) for dir in dirs: if dir[0] == '.': dirs.remove(dir) return dirs
[docs]def mkdir(dirs, noexit=False): try: for dir in _strlist(dirs): if not os.path.isdir(dir): os.makedirs(dir) except EnvironmentError as e: # hack to deal with race conditions on parallel file system if noexit: pass else: raise e
[docs]def mv(src='', dst=''): if isinstance(src, (list, tuple)): if len(src) > 1: assert isdir(dst) for sub in src: mv(sub, dst) return if isdir(dst): dst = join(dst, basename(src)) shutil.move(src, dst)
[docs]def rename(old, new, names): for name in _strlist(names): if name.find(old) >= 0: os.rename(name, name.replace(old, new))
[docs]def rm(path=''): for name in _strlist(path): if os.path.isfile(name): os.remove(name) elif os.path.islink(name): os.remove(name) elif os.path.isdir(name): shutil.rmtree(name)
[docs]def run(args): child = subprocess.Popen(args, shell=1) streamdata = child.communicate()[0] if child.returncode!=0: sys.exit(-1)
[docs]def select(items, prompt=''): while True: if prompt: print prompt for i, item in enumerate(items): print("%2d) %s" % (i + 1, item)) try: reply = int(raw_input().strip()) status = (1 <= reply <= len(items)) except (ValueError, TypeError, OverflowError): status = 0 if status: return items[reply - 1]
[docs]def touch(filename, times=None): with open(filename, 'a'): os.utime(filename, times)
def _strlist(object): if not isinstance(object, list): return [object] else: return object