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)
评论列表
文章目录