interactive.py 文件源码

python
阅读 45 收藏 0 点赞 0 评论 0

项目:JumpServer 作者: youkelike 项目源码 文件源码
def posix_shell(chan,user_obj,bind_host_obj,cmd_caches,log_recording):
    import select
    oldtty = termios.tcgetattr(sys.stdin)
    try:
        tty.setraw(sys.stdin.fileno())
        tty.setcbreak(sys.stdin.fileno())
        chan.settimeout(0.0)
        cmd = ''

        tab_key = False
        while True:
            r,w,e = select.select([chan,sys.stdin],[],[])
            if chan in r:
                try:
                    x = u(chan.recv(1024))
                    if tab_key:
                        if x not in ('\x07','\r\n'):
                            cmd += x
                        tab_key = False

                    if len(x) == 0:
                        sys.stdout.write('\r\n**** EOF ****\r\n')
                        break
                    sys.stdout.write(x)
                    sys.stdout.flush()
                except socket.timeout:
                    pass

            if sys.stdin in r:
                x = sys.stdin.read(1)
                if '\r' != x:
                    cmd += x
                else:
                    print('cmd->: ',cmd)
                    log_item = models.AuditLog(user_id=user_obj.id,
                                               bind_host_id=bind_host_obj.id,
                                               action_type='cmd',
                                               cmd=cmd,
                                               date=datetime.datetime.now())
                    cmd_caches.append(log_item)
                    cmd = ''
                    if len(cmd_caches) >= 10:#?10?????????
                        log_recording(cmd_caches)
                        cmd_caches = []
                if '\t' == x:
                    tab_key = True
                if len(x) == 0:
                    break
                chan.send(x)
    finally:
        termios.tcsetattr(sys.stdin,termios.TCSADRAIN,oldtty)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号