ž ¦ÿf¿c@sÑdZddlmZddlZddlZdddgZdZdZdZdZd d„Z d d „Z d d „Z dd„Z dd„Z dd„Zdd„Zeedd„Zeedd„ZdS(uPseudo terminal utilities.i(uselectNuopenptyuforkuspawniic CsNytjƒSWnttfk r(YnXtƒ\}}t|ƒ}||fS(udopenpty() -> (master_fd, slave_fd) Open a pty master/slave pair, using os.openpty() if possible.(uosuopenptyuAttributeErroruOSErroru_open_terminalu slave_open(u master_fdu slave_nameuslave_fd((u(/opt/alt/python33/lib64/python3.3/pty.pyuopenptys c Cs^ytjƒ\}}Wnttfk r0Yn'Xtj|ƒ}tj|ƒ||fStƒS(u›master_open() -> (master_fd, slave_name) Open a pty master and return the fd, and the filename of the slave end. Deprecated, use openpty() instead.(uosuopenptyuAttributeErroruOSErroruttynameucloseu_open_terminal(u master_fduslave_fdu slave_name((u(/opt/alt/python33/lib64/python3.3/pty.pyu master_open!s  u master_openc#Csyddl}Wntk r$YndXy"|jtjddƒ\}}Wn4tk r}}ztj|ƒ‚WYdd}~XnX||fSxpdD]h}x_dD]W}d||}ytj|tjƒ}Wntjk rãwœYnX|d||fSWqWtjdƒ‚dS( ulOpen pty master and return (master_fd, tty_name). SGI and generic BSD version, for when openpty() fails.iNi¶upqrstuvwxyzPQRSTu0123456789abcdefu/dev/ptyu/dev/ttyuout of pty devices(usgiu ImportErroru_getptyuosuO_RDWRuIOErroruerroruopen(usgiutty_nameu master_fdumsguxuyupty_nameufd((u(/opt/alt/python33/lib64/python3.3/pty.pyu_open_terminal1s$ ""   u_open_terminalcCs…tj|tjƒ}yddlm}m}Wntk rG|SYnXy$|||dƒ|||dƒWntk r€YnX|S(u©slave_open(tty_name) -> slave_fd Open the pty slave and acquire the controlling terminal, returning opened filedescriptor. Deprecated, use openpty() instead.i(uioctluI_PUSHuptemuldterm(uosuopenuO_RDWRufcntluioctluI_PUSHu ImportErroruIOError(utty_nameuresultuioctluI_PUSH((u(/opt/alt/python33/lib64/python3.3/pty.pyu slave_openHs   u slave_opencCs<ytjƒ\}}Wnttfk r0Yn=X|tkrcytjƒWqctk r_YqcXn||fStƒ\}}tjƒ}|tkr%tjƒtj|ƒtj |t ƒtj |t ƒtj |t ƒ|t kr÷tj|ƒntj tjt ƒtjƒ}tj|ƒn tj|ƒ||fS(udfork() -> (pid, master_fd) Fork and make the child a session leader with a controlling terminal.(uosuforkptyuAttributeErroruOSErroruCHILDusetsiduopenptyuforkucloseudup2u STDIN_FILENOu STDOUT_FILENOu STDERR_FILENOuopenuttynameuO_RDWR(upidufdu master_fduslave_fdutmp_fd((u(/opt/alt/python33/lib64/python3.3/pty.pyuforkZs0         cCs3x,|r.tj||ƒ}||d…}qWdS(u#Write all the data to a descriptor.N(uosuwrite(ufdudataun((u(/opt/alt/python33/lib64/python3.3/pty.pyu_writen‚s u_writencCstj|dƒS(uDefault read function.i(uosuread(ufd((u(/opt/alt/python33/lib64/python3.3/pty.pyu_readˆsu_readcCs°|tg}xt|ggƒ\}}}||krk||ƒ}|sX|j|ƒqktjt|ƒnt|kr|tƒ}|s™|jtƒq©t||ƒqqdS(uParent copy loop. Copies pty master -> standard output (master_read) standard input -> pty master (stdin_read)N(u STDIN_FILENOuselecturemoveuosuwriteu STDOUT_FILENOu_writen(u master_fdu master_readu stdin_readufdsurfdsuwfdsuxfdsudata((u(/opt/alt/python33/lib64/python3.3/pty.pyu_copyŒs     u_copycCsùt|ƒtdƒkr$|f}ntƒ\}}|tkrVtj|d|Œny&tjtƒ}tjtƒd}Wntj k r™d}YnXyt |||ƒWn7t t fk rç|rãtj ttj|ƒnYnXtj|ƒdS(uCreate a spawned process.uiiN(utypeuforkuCHILDuosuexeclputtyu tcgetattru STDIN_FILENOusetrawuerroru_copyuIOErroruOSErroru tcsetattru TCSAFLUSHuclose(uargvu master_readu stdin_readupidu master_fdumodeurestore((u(/opt/alt/python33/lib64/python3.3/pty.pyuspawn¡s"     (u__doc__uselectuosuttyu__all__u STDIN_FILENOu STDOUT_FILENOu STDERR_FILENOuCHILDuopenptyu master_openu_open_terminalu slave_openuforku_writenu_readu_copyuspawn(((u(/opt/alt/python33/lib64/python3.3/pty.pyus"      (