U
    ‹oë_Ó  ã                   @   sv   d dl Z d dlZd dlZd dlZd dlZzd dlmZmZ W n   d dlmZmZ Y nX de jkZ	G dd„ dƒZ
dS )é    N)ÚQueueÚEmptyÚposixc                   @   sL   e Zd Zdd„ Zdd„ Zdd„ Zddd	„Zddd„Zddd„Zddd„Z	dS )ÚRunc                 C   s   d S ©N© )Úselfr   r   ú<C:\Users\steff\Desktop\Mac OS\gibMacOS-master\Scripts\run.pyÚ__init__   s    zRun.__init__c                    sH   z&t ‡ fdd„dƒD ]}| |¡ qW n tk
r:   Y nX ˆ  ¡  d S )Nc                      s
   ˆ   d¡S )Né   )Úreadr   ©Úpiper   r	   Ú<lambda>   ó    z"Run._read_output.<locals>.<lambda>r   )ÚiterZputÚ
ValueErrorÚclose)r   r   ÚqÚliner   r   r	   Ú_read_output   s    zRun._read_outputc                 C   s(   t ƒ }tj| j||fd}d|_||fS )N)ÚtargetÚargsT)r   Ú	threadingÚThreadr   Údaemon)r   Úoutputr   Útr   r   r	   Ú_create_thread   s    zRun._create_threadFc              	   C   sÜ  d }}d }zv|r4t |ƒtkr4d dd„ |D ƒ¡}|sNt |ƒtkrNt |¡}tj||tjtjddt	d}|  
|j¡\}}|  
|j¡\}}	| ¡  |	 ¡  d }
}z| ¡ }
W n tk
rÂ   Y n X tj |
¡ ||
7 }tj ¡  z| ¡ }W n tk
r   Y n X tj |¡ ||7 }tj ¡  |
|  kr<dks@qš qš| ¡  |jd krXqdt d¡ qš| ¡ \}}|| || |jfW S    |rÐz| ¡ \}}W n   d }}Y nX || || |jf Y S Y d	S X d S )
NÚ ú c                 s   s   | ]}t  |¡V  qd S r   ©ÚshlexÚquote©Ú.0Úxr   r   r	   Ú	<genexpr>"   s     z%Run._stream_output.<locals>.<genexpr>r   T)ÚshellÚstdoutÚstderrÚbufsizeÚuniversal_newlinesÚ	close_fdsg{®Gáz”?©r   zCommand not found!r   )ÚtypeÚlistÚjoinÚstrr"   ÚsplitÚ
subprocessÚPopenÚPIPEÚON_POSIXr   r)   r*   ÚstartZ
get_nowaitr   ÚsysÚwriteÚflushÚpollÚ
returncodeÚtimeÚsleepÚcommunicate)r   Úcommr(   r   ÚerrorÚpr   r   ZqeZteÚcÚzÚoÚer   r   r	   Ú_stream_output   sV    
  
  
   zRun._stream_outputúutf-8Úignorec                 C   s$   t jdkr t|tƒr | ||¡S |S )N)é   r   )r9   Úversion_infoÚ
isinstanceÚbytesÚdecode)r   ÚvalueÚencodingÚerrorsr   r   r	   Ú_decodeM   s    zRun._decodec                 C   s    d }z`|r*t |ƒtkr*d dd„ |D ƒ¡}|sDt |ƒtkrDt |¡}tj||tjtjd}| 	¡ }W n   |d krzY dS Y nX |  
|d ¡|  
|d ¡|jfS )Nr    c                 s   s   | ]}t  |¡V  qd S r   r!   r$   r   r   r	   r'   W   s     z#Run._run_command.<locals>.<genexpr>)r(   r)   r*   r.   r   r   )r/   r0   r1   r2   r"   r3   r4   r5   r6   r@   rS   r=   )r   rA   r(   rD   rC   r   r   r	   Ú_run_commandS   s    
zRun._run_commandc                 C   s¸  t |ƒtkr|g}g }|D ]€}| dg ¡}| dd¡}| dd¡}| dd¡}| dd¡}	| dd¡}
| dd ¡}| d	d¡}|d kst|ƒ t|ƒsšq|r|  d
dg¡}d|d krt |ƒtkrâ| d|d  dd¡¡ n&t |ƒt	kr|d  dd¡d | }|rtd 
|¡ƒ |r0|  ||¡}nL|  ||¡}|	r\t|d ƒr\t|d ƒ |
r|t|d ƒr|t|d ƒ | |¡ |r|d dkr qžqt|ƒdkr´|d S |S )Nr   r(   FÚstreamÚsudor)   r*   ÚmessageÚshowÚwhichr   Ú
r   r    r   é   )r/   ÚdictÚgetÚprintÚlenrT   r0   ÚinsertÚreplacer2   r1   rH   Úappend)r   Zcommand_listZleave_on_failZoutput_listrA   r   r(   rU   rV   r)   r*   ZmessrX   Úoutr   r   r	   Úruna   sL    

zRun.runN)F)rI   rJ   )F)F)
Ú__name__Ú
__module__Ú__qualname__r
   r   r   rH   rS   rT   rd   r   r   r   r	   r   	   s   
0

r   )r9   r4   r>   r   r"   r   r   ZqueueÚbuiltin_module_namesr7   r   r   r   r   r	   Ú<module>   s   (
