]> arthur.barton.de Git - bup.git/blob - cmd/mux-cmd.py
mux: support wrapping arbitrary commands
[bup.git] / cmd / mux-cmd.py
1 #!/usr/bin/env python
2 import os, sys, subprocess, struct
3 from bup import options
4 from bup.helpers import *
5
6 optspec = """
7 bup mux command [arguments...]
8 --
9 """
10 o = options.Options(optspec)
11 (opt, flags, extra) = o.parse(sys.argv[1:])
12 if len(extra) < 1:
13     o.fatal('command is required')
14
15 subcmd = extra
16
17 debug2('bup mux: starting %r\n' % (extra,))
18
19 outr, outw = os.pipe()
20 errr, errw = os.pipe()
21 def close_fds():
22     os.close(outr)
23     os.close(errr)
24 p = subprocess.Popen(subcmd, stdout=outw, stderr=errw, preexec_fn=close_fds)
25 os.close(outw)
26 os.close(errw)
27 sys.stdout.write('BUPMUX')
28 sys.stdout.flush()
29 mux(p, sys.stdout.fileno(), outr, errr)
30 os.close(outr)
31 os.close(errr)
32 prv = p.wait()
33
34 if prv:
35     debug1('%s exited with code %d\n' % (extra[0], prv))
36
37 debug1('bup mux: done\n')
38
39 sys.exit(prv)