python 伪终端使用, 与/bin/bash子进程交互

 1 # encoding: utf-8
 2 
 3 import os
 4 import sys
 5 import time
 6 
 7 
 8 def child(master, slave):
 9     os.close(master)
10     os.dup2(slave, 0)
11     os.dup2(slave, 1)
12     os.dup2(slave, 2)
13     os.execvp("/bin/bash", ["bash", "-l", "-i"])
14 
15 
16 def parent():
17     master, slave = os.openpty()
18     new_pid = os.fork()
19     if new_pid == 0:
20         child(master, slave)
21 
22     time.sleep(1)
23     os.close(slave)
24 
25     os.write(master, "fg\n")
26     time.sleep(1)
27     _ = os.read(master, 1024)
28 
29 
30     os.write(master, sys.argv[1] + "\n")
31     time.sleep(1)
32     lines = []
33     while True:
34         tmp = os.read(master, 1024)
35         lines.append(tmp)
36         if len(tmp) < 1024:
37             break
38     output = "".join(lines)
39     output = "\n".join(output.splitlines()[1:])
40     print output
41 
42 parent()

 

posted @ 2016-05-04 14:16  taotaowill  阅读(1616)  评论(0编辑  收藏  举报