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()