Exemple #1
0
    def Run(self, cmd_val):
        # type: (cmd_value__Argv) -> int
        attrs, arg_r = flag_spec.ParseCmdVal('read', cmd_val)
        arg = arg_types.read(attrs.attrs)
        names = arg_r.Rest()

        fd = self.stdin.fileno()

        if arg.t >= 0.0:
            if arg.t != 0.0:
                e_die("read -t isn't implemented (except t=0)")
            else:
                return 0 if pyos.InputAvailable(fd) else 1

        bits = 0
        if self.stdin.isatty():
            bits |= pyos.TERM_ICANON
            if arg.s:  # silent
                bits |= pyos.TERM_ECHO

            if arg.p is not None:  # only if tty
                mylib.Stderr().write(arg.p)

        if bits == 0:
            status = self._Read(arg, names)
        else:
            term = pyos.TermState(fd, ~bits)
            try:
                status = self._Read(arg, names)
            finally:
                term.Restore()
        return status
Exemple #2
0
    def Run(self, cmd_val):
        # type: (cmd_value__Argv) -> int
        attrs, arg_r = flag_spec.ParseCmdVal('read', cmd_val)
        arg = arg_types.read(attrs.attrs)
        names = arg_r.Rest()

        # Don't respect any of the other options here?  This is buffered I/O.
        if arg.line:  # read --line
            var_name, var_spid = arg_r.Peek2()
            if var_name is None:
                var_name = '_line'
            else:
                if var_name.startswith(':'):  # optional : sigil
                    var_name = var_name[1:]
                arg_r.Next()

            next_arg, next_spid = arg_r.Peek2()
            if next_arg is not None:
                raise error.Usage('got extra argument', span_id=next_spid)

            return self._Line(arg, var_name)

        if arg.q:
            e_usage('--qsn can only be used with --line')

        if arg.all:  # read --all
            var_name, var_spid = arg_r.Peek2()
            if var_name is None:
                var_name = '_all'
            else:
                if var_name.startswith(':'):  # optional : sigil
                    var_name = var_name[1:]
                arg_r.Next()

            next_arg, next_spid = arg_r.Peek2()
            if next_arg is not None:
                raise error.Usage('got extra argument', span_id=next_spid)

            return self._All(var_name)

        if arg.q:
            e_usage('--qsn not implemented yet')

        fd = self.stdin.fileno()

        if arg.t >= 0.0:
            if arg.t != 0.0:
                e_die("read -t isn't implemented (except t=0)")
            else:
                return 0 if pyos.InputAvailable(fd) else 1

        bits = 0
        if self.stdin.isatty():
            bits |= pyos.TERM_ICANON
            if arg.s:  # silent
                bits |= pyos.TERM_ECHO

            if arg.p is not None:  # only if tty
                mylib.Stderr().write(arg.p)

        if bits == 0:
            status = self._Read(arg, names)
        else:
            term = pyos.TermState(fd, ~bits)
            try:
                status = self._Read(arg, names)
            finally:
                term.Restore()
        return status