def __start_proc(self):
# for more information, pls refer :
# http://rachid.koucha.free.fr/tech_corner/pty_pdip.html
# open new pty
master,slave = pty.openpty()
# set to raw mode
tty.setraw(master)
tty.setraw(slave)
# binding slave in to subprocess
self.proc = Popen(self.elf_path,
stdin=slave,
stdout=slave,
stderr=slave,
close_fds=True,
preexec_fn=self.preexec_fn,
env=self.env,
shell=True
)
self.pid = self.proc.pid
print('[+] Start pid : %d' % self.pid)
# binding master to own controlled file descriptors
self.proc.stdin = os.fdopen(os.dup(master),"r+")
self.proc.stdout = os.fdopen(os.dup(master),"r+")
self.proc.stderr = os.fdopen(os.dup(master),"r+")
# close unnessesary file descriptor
os.close(slave)
os.close(master)
# set non-blocking mode
fd = self.proc.stdout.fileno()
fl = fcntl.fcntl(fd, fcntl.F_GETFL)
fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)
评论列表
文章目录