summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHelmut Grohne <helmut@subdivi.de>2012-04-15 13:54:30 +0200
committerHelmut Grohne <helmut@subdivi.de>2012-04-15 13:54:30 +0200
commit48a9eb4449b5a591671a42b39722dff16e62e813 (patch)
treeeb8bff91381742ec952a36baac0724a9a62e9261
parent8a6df801f5f810a2e3e1f13d38c2bf8da298739d (diff)
downloadtcvt-48a9eb4449b5a591671a42b39722dff16e62e813.tar.gz
print a reasonable error message when exec fails
-rwxr-xr-xtcvt.py19
1 files changed, 18 insertions, 1 deletions
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)