B
    `                 @   sl   d dl mZ d dl mZ d dl mZ d dlZdd Zdd Zd	d
 ZdddZdd Z	dd Z
dddZdS )    )print_function)division)absolute_importNc             C   s   | d dkr|dkrdS dS )Nr   "    )lineisquotfr   r   exec_command.py
first_quot   s    r   c             C   s$   | t | d  dkr |dkr dS dS )Nr   r   r   )len)r   r	   r   r   r
   	last_quot   s    r   c             C   s   |  d} d}d}g }xtt| D ]p}| | dkr$t| | |dkrTd}| | }q$t| | |dkrd}|d| |  7 }|| q$|| |  q$W t| d S )N r    r   )splitranger   r   r   appendprint)commandZisquotZresresultir   r   r
   parse_command   s"    

r   c          
   C   s   g }yJt j| dt j|dd}x.|j }|s.P | dkr||  qW W n0 tk
r~ } ztdt	| W d d }~X Y nX |S )NT)shellstdoutenvtextr   zCall process error:)

subprocessPopenPIPEr   readlinestripr   	Exceptionr   str)r   r   r   poutputinstr   r   r
   exec_command.   s    
 r&   c          
   C   st   y4t j| dt jt jd}| \}}|jdkr2dS dS  tk
rn } ztd|  d t|  W d d }~X Y nX dS )NT)r   r   stderrr   FzCall process error(z): )r   r   r   communicate
returncoder!   r   r"   )r   r#   Zres_in_jsonerrr%   r   r   r
   exec_command_check=   s    
*r+   c             C   s&   t | }x|D ]}||kr|S qW dS )N)r&   )r   Z	substringr   r   r   r   r
   exec_command_find_substringI   s
    
r-   Fc             C   sn   yJ|r$t j| dt jt jtdd}nt j| dt jtdd}| \}}W n tk
rh   td|  g S X |S )NTz	/dev/null)r   r   r'   stdin)r   r   r.   zError: failed to run )r   r   r   ZSTDOUTopenr(   OSErrorr   )r   Zmerge_stderrr#   outr*   r   r   r
   exec_command_null_inputP   s    
r2   )N)F)Z
__future__r   r   r   r   r   r   r   r&   r+   r-   r2   r   r   r   r
   <module>   s   
