3
Ĥ[U                 @   s   yd dl m Z  W n ek
r(   dZ Y nX d dlZd dlZd dlmZmZ d dlmZ ej	e
ZejdZG dd dZd
dd	ZdS )    )datetimeN)PIPEPopen)dumpsz4.*?/usr/lib/python(\d(?:.\d+)?)/(site|dist)-packagesc               @   s   e Zd Zdd Zdd ZdS )memoizec             C   s   || _ i | _d S )N)funccache)selfr    r
   (/usr/share/python3/debpython/__init__.py__init__   s    zmemoize.__init__c             O   s2   t ||f}|| jkr(| j||| j|< | j| S )N)r   r   r   )r	   argskwargskeyr
   r
   r   __call__   s    
zmemoize.__call__N)__name__
__module____qualname__r   r   r
   r
   r
   r   r      s   r   c       	      C   s   d||d}d}|dkrnv|dkr2|j ttd n^|rt|trNd}t|d}trj|jdjtj j	  |jdj|  |j
  |j ||d tjd	|  t| f|>}|j \}}|o|j  t|j|ot|d
|ot|d
dS Q R X dS )a<  Execute external shell commad.

    :param cdw: currennt working directory
    :param env: environment
    :param log_output:
        * opened log file or path to this file, or
        * None if output should be included in the returned dict, or
        * False if output should be redirectored to stdout/stderr
    T)shellcwdenvFN)stdoutstderraz
# command executed on {}z
$ {}
zinvoking: %szutf-8)
returncoder   r   )updater   
isinstancestropenr   writeformatZnowZ	isoformatflushlogdebugr   communicateclosedictr   )	Zcommandr   r   Z
log_outputr   r%   processr   r   r
   r
   r   execute   s,    


r(   )NNN)r   ImportErrorloggingre
subprocessr   r   pickler   	getLoggerr   r"   compilePUBLIC_DIR_REr   r(   r
   r
   r
   r   <module>   s   


