B
    pjÆ`·	  ã               @   sŒ   d Z ddlZddlZddlZddlZddlmZ ddlmZ dd„ Z	G dd„ deƒZ
eƒ  d	¡Zedk	r‚e
eƒZe ¡  ed
ƒ ne	ƒ  dS )z:
a remote python shell

for injection into startserver.py
é    N)ÚThread)Ú	print_excc        
      C   s  t dƒ tjd  d¡\} }t|ƒ}ttj tjd ¡dƒ 	¡ }t
 
t
jt
j¡}| | |f¡ | t|ƒd ¡ t dƒ |tjg}ydx^t |g g ¡\}}}tj|kr¸tƒ }| |d ¡ ||kr†| d¡}tj |¡ tj ¡  q†W W n    dd l}	t |	 ¡ ƒ Y nX t d¡ d S )	Nzclient side startingé   ú:r   ZrUÚ
zsend boot stringi   )ÚprintÚsysÚargvÚsplitÚintÚopenÚosÚpathÚabspathÚreadÚsocketZAF_INETZSOCK_STREAMZconnectZsendallÚreprÚstdinÚselectZ	raw_inputZrecvÚstdoutÚwriteÚflushÚ	tracebackr   Úexit)
ZhostZportZmyselfÚsockZ	inputlistÚrÚwÚeÚliner   © r   ú3lib/python3.7/site-packages/execnet/script/shell.pyÚ
clientside   s.    


r!   c               @   s   e Zd Zdd„ Zdd„ ZdS )Úpromptagentc             C   s   t dƒ t | ¡ || _d S )Nzserver side starting)r   r   Ú__init__Ú
clientsock)Úselfr$   r   r   r    r#   -   s    
zpromptagent.__init__c             C   sü   t dƒ | j d¡}| j d¡}| j ¡ }xÂyš| d| ¡ | ¡  | ¡ }|sXtdƒ‚| ¡ r¼t	j
t	j }}|| t	_
t	_z0ytt|d ddƒƒ W n   tƒ  Y nX W d |t	_
|t	_X | ¡  W q, tk
rè   t	j d	¡ P Y q,X q,W | j ¡  d S )
NzEntering thread prompt loopr   r   z
%s %s >>> Znothingr   z<remote pyin>Zsinglez'connection close, prompt thread returns)r   r$   ZmakefileZgetsocknamer   r   ÚreadlineÚEOFErrorÚstripr   r   ÚstderrÚexecÚcompiler   Úclose)r%   Z
clientfileZfileinÚlocr   ZoldoutZolderrr   r   r    Úrun2   s4    
zpromptagent.runN)Ú__name__Ú
__module__Ú__qualname__r#   r.   r   r   r   r    r"   ,   s   r"   r$   zpromptagent - thread started)Ú__doc__r   r   r   r   Z	threadingr   r   r   r!   r"   ÚglobalsÚgetr   ZprompterÚstartr   r   r   r   r    Ú<module>   s   '
