| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
Terminaaliproxy pythonillaZtane 26.11.04 17:06 Näyttää miten pythonin pty-moduulilla tehdään pseudoterminaali. Tarkoitukseni on tehdä koodista lopulta proxy, joka nappaa ansi escape secquencejen tapaisia terminaalidatasta ja tekee tällä jänniä juttuja, mm. käyttää puhesyntetisaattoria.
#!/usr/bin/python # -*- coding: latin1 -*- # # Eli, ajettaessa saat bash-shellin auki, jossa kaikki a-kirjaimet # ovat kirkkaan VIHREITÄ... Toimii Linux/SGI, python 2.1-> # import pty import os import sys import select import atexit # Palautetaan vanhat asetukset. atexit kutsuu # def recover_term_settings(settings): import termios, sys termios.tcdrain(fd); termios.tcsetattr(fd, termios.TCSANOW, settings) print "Bye!!!" # poistetaan oikeasta terminaalista ICANON, # ISIG ja ECHO! # def set_term_mode(): import termios, sys fd = sys.stdin.fileno() term_settings = termios.tcgetattr(fd) new = termios.tcgetattr(fd) new[3] = (new[3] & ~termios.ECHO & ~termios.ISIG & ~termios.ICANON) termios.tcsetattr(fd, termios.TCSADRAIN, new) atexit.register(recover_term_settings, term_settings) def filter(text): return text.replace('a', '\033[1;32ma\033[0m') def do_work(): while 1: input,output,error = select.select([0, fd], [], [0, fd]) if len(error): print "Error on select, exiting" sys.exit(1) if 0 in input: data = os.read(0, 1024) os.write(fd, data) if fd in input: data = os.read(fd, 1024) data = filter(data) os.write(1, data) pid,fd = pty.fork() if pid == 0: os.system("bash") else: set_term_mode() try: do_work() except: pass editoitu: 17:22 26.11.04 Ztane 17:20 26.11.04 pikkvmyyn ansiosta koodi nyt tekee esimerkkinä ton täysin turhan a:n värityksen... Ztane 17:37 26.11.04 Ok... paransin koodii ja laitoin vanhojen asetuksien palautuksen atexitillä tapahtuvaksi Ztane 16:27 27.11.04 Heh, käytän tätä jo: irkkipalvelimellani irssi lähettää escapekoodeja, joitten sisältämä info lähetetään festivalille... |
![]() Haku
|