diff options
author | Helmut Grohne <helmut@subdivi.de> | 2012-04-15 13:54:30 +0200 |
---|---|---|
committer | Helmut Grohne <helmut@subdivi.de> | 2012-04-15 13:54:30 +0200 |
commit | 48a9eb4449b5a591671a42b39722dff16e62e813 (patch) | |
tree | eb8bff91381742ec952a36baac0724a9a62e9261 /tcvt.py | |
parent | 8a6df801f5f810a2e3e1f13d38c2bf8da298739d (diff) | |
download | tcvt-48a9eb4449b5a591671a42b39722dff16e62e813.tar.gz |
print a reasonable error message when exec fails
Diffstat (limited to 'tcvt.py')
-rwxr-xr-x | tcvt.py | 19 |
1 files changed, 18 insertions, 1 deletions
@@ -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) |