Source code for xonsh.xoreutils.tee

"""A tee implementation for xonsh."""


[docs] def tee(args, stdin, stdout, stderr): """A tee command for xonsh.""" mode = "w" if "-a" in args: args.remove("-a") mode = "a" if "--append" in args: args.remove("--append") mode = "a" if "--help" in args: print(TEE_HELP, file=stdout) return 0 if stdin is None: msg = "tee was not piped stdin, must have input stream to read from." print(msg, file=stderr) return 1 errors = False files = [] for i in args: if i == "-": files.append(stdout) else: try: files.append(open(i, mode)) except: print(f"tee: failed to open {i}", file=stderr) errors = True files.append(stdout) while True: r = stdin.read(1024) if r == "": break for i in files: i.write(r) for i in files: if i != stdout: i.close() return int(errors)
TEE_HELP = """This version of tee was written in Python for the xonsh project: http://xon.sh Based on tee from GNU coreutils: http://www.gnu.org/software/coreutils/ Usage: tee [OPTION]... [FILE]... Copy standard input to each FILE, and also to standard output. -a, --append append to the given FILEs, do not overwrite --help display this help and exit If a FILE is -, copy again to standard output.""" # NOT IMPLEMENTED: # -i, --ignore-interrupts ignore interrupt signals