Back to Python 3 now I've figured out FD_CLOEXEC subtlety interacting with close_fds/pass_fds