import re
import subprocess
import socket
+import os
donor = None
sock.close()
def permute_fds_for_exec():
- actual2intended = { info[0]: nominal for nominal, info in fdmap.items }
+ actual2intended = { info[0]: nominal for nominal, info in fdmap.items() }
# invariant at the start of each loop iteration:
# for each intended (aka `nominal') we have processed:
# relevant open-file is only held in fd intended
def implement_exec(argl):
if donor is not None: donor.detach()
sys.stdout.flush()
- permut_fds_for_exec()
+ permute_fds_for_exec()
os.execvp(argl[0], argl)
def set_donor(pid):
global donor
if donor is not None: donor.detach()
- donor = fishdescriptor.fish.Donor(pid)
+ donor = fishdescriptor.fish.Donor(pid, debug=ov.debug)
def ocb_set_donor(option, opt, value, parser):
set_donor(value)
op.disable_interspersed_args()
op.add_option('-p','--pid', type='int', action='callback',
callback=ocb_set_donor)
+ op.add_option('-D','--debug', action='store_const',
+ dest='debug', const=sys.stderr)
+ ov.debug = None
args = sys.argv[1:]
last_nominal = None # None or (nominal,) ie None or (None,) or (int,)
if not len(args): break
arg = args.pop(0)
- print("ARG %s" % arg, file=sys.stderr)
if donor is None:
- print("SET_DONOR", file=sys.stderr)
set_donor(int(arg))
elif arg_matches(r'^(?:(\d+)=)?(\d+)?$'):
(nominal, there) = m.groups()