From 48a9eb4449b5a591671a42b39722dff16e62e813 Mon Sep 17 00:00:00 2001 From: Helmut Grohne Date: Sun, 15 Apr 2012 13:54:30 +0200 Subject: print a reasonable error message when exec fails --- tcvt.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/tcvt.py b/tcvt.py index eb5891e..48d04bc 100755 --- a/tcvt.py +++ b/tcvt.py @@ -447,16 +447,33 @@ def compute_keymap(symbolic_map): curses.setupterm(oldterm) return keymap +def set_cloexec(fd): + flags = fcntl.fcntl(fd, fcntl.F_GETFD, 0) + flags |= fcntl.FD_CLOEXEC + fcntl.fcntl(fd, fcntl.F_SETFD, flags) + def main(): keymapping = compute_keymap(symbolic_keymapping) t = Terminal() + errpiper, errpipew = os.pipe() + set_cloexec(errpipew) pid, masterfd = pty.fork() if pid == 0: # child + os.close(errpiper) os.environ["TERM"] = "ansi" - os.execvp(sys.argv[1], sys.argv[1:]) + try: + os.execvp(sys.argv[1], sys.argv[1:]) + except OSError, err: + os.write(errpipew, "exec failed: %s" % (err,)) sys.exit(1) + os.close(errpipew) + data = os.read(errpiper, 1024) + os.close(errpiper) + if data: + print(data) + sys.exit(1) try: t.start() t.resizepty(masterfd) -- cgit v1.2.3