ó
Fµ­Nc           @   sÆ  d  d l  Z  d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l Z d  d l	 m
 Z
 m Z m Z m Z d  d l	 m Z d  d l m Z d  d l Z d  d l m Z d d d d	 d
 d d g Z d „  Z d „  Z d „  Z d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e f d „  ƒ  YZ d „  Z  d „  Z! d „  Z" d  e j# d! Z$ d" „  Z% d S(#   iÿÿÿÿN(   t	   find_uidst   TaskStatsNetlinkt   ProcessListt   Stats(   t
   ThreadInfo(   t   VERSION(   t   IoprioSetErrort   Bt   Kt   Mt   Gt   Tt   Pt   Ec         C   s|   |  d k r d } n  |  d k  r1 d } |  }  n d St  t j |  d d ƒ d ƒ } d | t |  ƒ d d | >t | f S(	   Ni    t    t   -s   0.00 Bi   i
   s	   %s%.2f %si   (   t   intt   matht   logt   floatt   UNITS(   t   sizet   signt   expo(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   human_size)   s    	
 c         C   s   |  j  r d | d St | ƒ S(   Ns   %.2f Kg      @(   t	   kilobytesR   (   t   optionst   bytes(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_size5   s    	c         C   s!   t  |  | o t | ƒ | ƒ d S(   Ns   /s(   R   R   (   R   R   t   duration(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_bandwidth:   s    c            sÌ   ‡  f d †  } ˆ j  rF | j } ‡ f d †  } t j ƒ  | j ‰  n | j } ‡ f d †  } | | j ƒ } | | j ƒ } | | j ˆ  ƒ } | j | j	 }	 t
 d |	 ƒ }	 | |	 ˆ  ƒ }
 | | | |
 f S(   Nc            s   d t  d |  ˆ  d ƒ S(   Ns   %.2f %%gÂõ(\ÿX@g    ÐcA(   t   min(   t   delay(   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   delay2percent@   s    c            s   t  ˆ  |  ƒ S(   N(   R   (   R   R   (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   <lambda>D   s    c            s   t  ˆ  |  | ƒ S(   N(   R   (   R   R   (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   H   s   i    (   t   accumulatedt   stats_accumt   timet   stats_accum_timestampt   stats_deltat   blkio_delay_totalt   swapin_delay_totalt
   read_bytest   write_bytest   cancelled_write_bytest   max(   R   t   processR   R!   t   statst   display_formatt   io_delayt   swapin_delayR*   t   written_bytesR+   (    (   R   R   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   format_stats=   s    			t   CancelInputc           B   s   e  Z RS(    (   t   __name__t
   __module__(    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR5   V   s    t
   InvalidIntc           B   s   e  Z RS(    (   R6   R7   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR8   W   s    t
   InvalidPidc           B   s   e  Z RS(    (   R6   R7   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR9   X   s    t
   InvalidTidc           B   s   e  Z RS(    (   R6   R7   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR:   Y   s    t   InvalidIoprioDatac           B   s   e  Z RS(    (   R6   R7   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR;   Z   s    t   IOTopUIc        	   B   s  e  Z d  „  e f d „  e f d „  e f d „  e f d „  e f d „  e f d „  e f d „  e f g Z d „  Z d	 „  Z d
 „  Z d „  Z d „  Z	 d e d „ Z d e d „ Z d „  Z d „  Z d „  Z d „  Z d d „ Z d d „ Z d „  Z d „  Z d „  Z d „  Z RS(   c         C   s   |  j  S(   N(   t   pid(   t   pt   s(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   c   s    c         C   s
   |  j  ƒ  S(   N(   t   ioprio_sort_key(   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   d   s    c         C   s
   |  j  ƒ  S(   N(   t   get_user(   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   e   s    c         C   s   | j  S(   N(   R*   (   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   f   s    c         C   s   | j  | j S(   N(   R+   R,   (   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   g   s    c         C   s   | j  S(   N(   R)   (   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   h   s    c         C   s!   | j  p  t | j p | j ƒ S(   N(   R(   R   R*   R+   (   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   k   s   	c         C   s
   |  j  ƒ  S(   N(   t   get_cmdline(   R>   R?   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   m   s    c         C   s”   | |  _  | |  _ d |  _ t j |  j d |  _ |  j j s | |  _ |  j ƒ  y% t	 j
 ƒ  t	 j ƒ  t	 j d ƒ Wq t	 j k
 rŒ q Xn  d  S(   Ni   i   i    (   t   process_listR   t   sorting_keyR<   t   sorting_keyst   sorting_reverset   batcht   wint   resizet   cursest   use_default_colorst   start_colort   curs_sett   error(   t   selfRH   RC   R   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   __init__p   s    				


c         C   s   |  j  j ƒ  \ |  _ |  _ d  S(   N(   RH   t   getmaxyxt   heightt   width(   RO   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRI      s    c   	      C   s™  d } t  j ƒ  } |  j j sD | j t j j ƒ  t  j t  j	 Bƒ n  xN|  j j
 d  k sk | |  j j
 k  r”|  j j ƒ  } | \ } } |  j | d k | | |  j j ƒ |  j j
 d  k	 rÝ | d 7} | |  j j
 k rò Pqò n | d k rò d } n  y | j |  j j d ƒ } WnA t  j k
 rR} | j rL| j d t j k rLd } qS‚  n X|  j j sl|  j ƒ  n  | rG |  j j ƒ  } |  j | ƒ qG qG Wd  S(   Ni    i   g     @@(   t   selectt   pollR   RG   t   registert   syst   stdint   filenot   POLLINt   POLLPRIt
   iterationst   NoneRC   t   refresh_processest   refresh_displayR   t   delay_secondsRN   t   argst   errnot   EINTRRI   RH   t   getcht
   handle_key(	   RO   R\   RU   t   totalt
   total_readt   total_writet   eventst   et   key(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   run„   s6    &
		c         C   s   |  j  |  _  d  S(   N(   RF   (   RO   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   reverse_sorting£   s    c         C   s|   |  j  } |  j  | 7_  t d |  j  ƒ |  _  t t t j ƒ d |  j  ƒ |  _  | |  j  k rx t j |  j  d |  _ n  d  S(   Ni    i   (   RD   R-   R   t   lenR<   RE   RF   (   RO   t   deltat   orig_sorting_key(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   adjust_sorting_key¦   s    	"c         C   sÁ   |  j  j d d t d ƒ t j B|  j ƒ |  j  j d d | t j ƒ |  j  j ƒ  t j	 ƒ  t j
 d ƒ |  j  j d t | ƒ ƒ } t j
 d ƒ t j ƒ  | d k r« | S| r½ t ƒ  ‚ n  | S(   Ni   i    t    R   (   NR   (   RH   t   hlinet   ordRJ   t   A_NORMALRS   t   addstrt   A_BOLDt   refresht   echoRM   t   getstrRn   t   noechoR]   R5   (   RO   t   promptt   defaultt   empty_is_cancelt   inp(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_str°   s    )

c         C   sD   |  j  | | | ƒ } y t | ƒ SWn t k
 r? t ƒ  ‚ n Xd  S(   N(   R€   R   t
   ValueErrorR8   (   RO   R|   R}   R~   R   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_int¿   s
    c         C   sE   y |  j  d ƒ SWn- t k
 r- t ƒ  ‚ n t k
 r@ ‚  n Xd  S(   Ns   PID to ionice: (   R‚   R8   R9   R5   (   RO   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_pidÆ   s    c         C   sE   y |  j  d ƒ SWn- t k
 r- t ƒ  ‚ n t k
 r@ ‚  n Xd  S(   Ns   TID to ionice: (   R‚   R8   R:   R5   (   RO   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_tidÎ   s    c         C   s†   yA | d  k	 r+ |  j d | | t ƒ } n |  j d d  t ƒ } Wn t k
 r] t ƒ  ‚ n X| d k  sv | d k r‚ t ƒ  ‚ n  | S(   Ns'   I/O priority data (0-7, currently %s): s   I/O priority data (0-7): i    i   (   R]   R‚   t   FalseR8   R;   (   RO   t   ioprio_dataR   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_dataÖ   s    	c      
   C   s  y | j  | ƒ } Wn t k
 r, d } n Xt | ƒ d } x½t rü|  j j d d t d ƒ t j B|  j	 ƒ |  j j
 d d | t j ƒ t | ƒ } xn t | ƒ D]` \ } } d | }	 | | k rÒ t j }
 n	 t j }
 |  j j
 d | |	 |
 ƒ | t |	 ƒ 7} q¤ Wxî t rø|  j j ƒ  } | t j t d ƒ f k rU| d k rU| d 8} Pq| t j t d ƒ f k rŠ| | k  rŠ| d 7} Pq| t j t d ƒ t d	 ƒ f k r¶| | S| d
 t j t j t j t d ƒ t d ƒ f k rt ƒ  ‚ qqWq@ Wd  S(   Niÿÿÿÿi   i    Rr   s    %s t   lt   rs   
s   i   t   qt   Q(   t   indexR   Rn   t   TrueRH   Rs   Rt   RJ   Ru   RS   t   insstrRw   t	   enumeratet	   A_REVERSERd   t   KEY_LEFTt	   KEY_RIGHTt	   KEY_ENTERt
   KEY_CANCELt	   KEY_CLOSEt   KEY_EXITR5   (   RO   R|   t   display_listt   ret_listt   selectedt   set_lent   offsett   it   itemt   displayt   attrRk   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt
   prompt_setã   s:    
	)
		'
'
$!c         C   sU   d } d d d g } d d d g } | d  k r9 d } n  |  j | | | | ƒ } | S(	   Ns   I/O priority class: s	   Real-times   Best-effortt   Idlet   rtt   bet   idlei   (   R]   R    (   RO   t   ioprio_classR|   t   classes_promptt   classes_retR   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_class  s    	s   Error!c         C   sg   |  j  j d d t d ƒ t j B|  j ƒ |  j  j d d d | t j ƒ |  j  j ƒ  t	 j
 d ƒ d  S(   Ni   i    Rr   s     %s  (   RH   Rs   Rt   RJ   Ru   RS   RŽ   R   Rx   R%   t   sleep(   RO   RN   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_error  s    ) c         C   s:   |  j  j d d t d ƒ t j B|  j ƒ |  j  j ƒ  d  S(   Ni   i    Rr   (   RH   Rs   Rt   RJ   Ru   RS   Rx   (   RO   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   prompt_clear  s    )c            sb  ‡  f d †  } ‡  f d †  } ‡  f d †  } ‡  f d †  } i d „  t  d ƒ 6d „  t  d ƒ 6‡  f d	 †  t  d
 ƒ 6‡  f d †  t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6| t  d ƒ 6‡  f d †  t j 6‡  f d †  t j 6‡  f d †  t j 6‡  f d †  t j 6} | j | d „  ƒ } | ƒ  d  S(   Nc              s   ˆ  j  j t N_ d  S(   N(   R   R#   R   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_accumulated  s    c              s   ˆ  j  j t N_ d  S(   N(   R   t   onlyR   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_only_io  s    c              s0   ˆ  j  j t N_ ˆ  j j ƒ  ˆ  j j ƒ  d  S(   N(   R   t	   processesR   RC   t   clearR^   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   toggle_processes  s    c             s–  yÐ ˆ  j  j r0 ˆ  j ƒ  }  ˆ  j j |  ƒ } n! ˆ  j ƒ  } t | ˆ  j j ƒ } | j ƒ  } t	 j
 | ƒ \ } } ˆ  j | ƒ } | d k r– d } n ˆ  j | ƒ } | j | | ƒ ˆ  j j ƒ  ˆ  j j ƒ  Wnµ t k
 rù } ˆ  j d | j ƒ n™ t k
 rˆ  j d ƒ n| t k
 r3ˆ  j d ƒ n_ t k
 rPˆ  j d ƒ nB t k
 rmˆ  j d ƒ n% t k
 r‡ˆ  j ƒ  n Xˆ  j ƒ  d  S(   NR¤   i    s   Error setting I/O priority: %ss   Invalid process id!s   Invalid thread id!s   Invalid I/O priority data!s   Invalid integer!(   R   R¯   Rƒ   RC   t   get_processR„   R   t   taskstats_connectiont
   get_iopriot   iopriot   to_class_and_dataR¨   R‡   t
   set_ioprioR°   R^   R   Rª   t   errR9   R:   R;   R8   R5   R«   (   R=   t	   exec_unitt   tidt   ioprio_valueR¥   R†   Rj   (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   ionice  s:    	c           S   s   t  j d ƒ S(   Ni    (   RW   t   exit(    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   D  s    RŠ   c           S   s   t  j d ƒ S(   Ni    (   RW   R½   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   F  s    R‹   c              s
   ˆ  j  ƒ  S(   N(   Rm   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   H  s    R‰   c              s
   ˆ  j  ƒ  S(   N(   Rm   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   J  s    t   Rt   at   At   ot   OR>   R   Rœ   t   Ic              s   ˆ  j  d ƒ S(   Niÿÿÿÿ(   Rq   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   \  s    c              s   ˆ  j  d ƒ S(   Ni   (   Rq   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   ^  s    c              s   ˆ  j  t t j ƒ ƒ S(   N(   Rq   Rn   R<   RE   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   `  s    c              s   ˆ  j  t t j ƒ ƒ S(   N(   Rq   Rn   R<   RE   (    (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   b  s    c           S   s   d  S(   N(   R]   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   e  s    (   Rt   RJ   R‘   R’   t   KEY_HOMEt   KEY_ENDt   get(   RO   Rk   R¬   R®   R±   R¼   t   key_bindingst   action(    (   RO   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyRe     s.    #c            s½   ‡  f d †  } ‡  f d †  } t  | ˆ  j j j ƒ  ƒ } t j ˆ  j d ‰ ˆ  j j re d „  ‰ n	 d „  ‰ | j	 d ‡ ‡ f d †  d ˆ  j
 ƒ ˆ  j j s° | ˆ  j d	 3n  t | | ƒ S(
   Nc            s.  t  ˆ  j |  ˆ  j j ƒ } | \ } } } } t j rI d | | f } n d } d |  j |  j ƒ  |  j ƒ  d  | | | f } |  j	 ƒ  } ˆ  j j
 sˆ  j t | ƒ }	 d |	 k  oÆ t | ƒ k  n r|	 d d }
 |	 |
 d } | |
  d | | } qn  | | 7} ˆ  j j
 s*| ˆ  j  } n  | S(   Ns   %7s %7s s    ?unavailable?  s   %5d %4s %-8s %11s %11s %si   i   i   t   ~(   R4   R   RC   R   R   t   has_blkio_delay_totalR=   R´   RA   RB   RG   RS   Rn   (   R>   R/   R1   R2   R*   R+   t   delay_statst   linet   cmdlinet   remaining_lengtht   len1t   offset2(   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   formati  s&    	"
c            s    ˆ  j  j p |  j ˆ  j  j ƒ S(   N(   R   R­   t   did_some_ioR#   (   R>   (   RO   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   should_format  s    i    c         S   s   |  j  S(   N(   R$   (   R>   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   †  s    c         S   s   |  j  S(   N(   R'   (   R>   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   ˆ  s    Rk   c            s   ˆ  |  ˆ |  ƒ ƒ S(   N(    (   R>   (   Rk   t   stats_lambda(    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   ‰  s    t   reversei   (   t   filterRC   R¯   t   valuesR<   RE   RD   R   R#   t   sortRF   RG   RR   t   map(   RO   RÑ   RÓ   R¯   (    (   RO   Rk   RÔ   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   get_datah  s    	
c         C   s6  d t  |  j | | ƒ j d ƒ t  |  j | | ƒ j d ƒ f } |  j j rU d } n d } | d d d d d	 d
 d g } |  j ƒ  } |  j j r× d g | } t j d ƒ }	 g  | D] }
 |	 |
 ^ q´ } |	 | } n  |  j j rU|  j j d k r&| GH|  j j t	 | ƒ k r&d j
 | ƒ GHq&n  x | D] }
 |
 j d ƒ GHq-Wt j j ƒ  nÝ|  j j ƒ  |  j j | |  j  ƒ |  j j d d t d ƒ t j B|  j ƒ |  j } x® t t | ƒ ƒ D]š } t j } | | } | |  j k ró| d } n  | |  j k r+| t j O} | |  j r!d p$d 7} n  | |  } | t | ƒ 8} |  j j | | ƒ q¾Wt j rnd  } n d } t t | ƒ |  j  d t	 t! | ƒ ƒ ƒ } xV t | ƒ D]H } y+ |  j j | d d | | j d ƒ ƒ Wq­t j" k
 rôq­Xq­W| r%|  j j# |  j  d d | t j ƒ n  |  j j$ ƒ  d  S(   Ns*   Total DISK READ: %s | Total DISK WRITE: %si   s     PIDs     TIDs     PRIOs     USERs        DISK READs     DISK WRITEs     SWAPINs         IOs       COMMANDs       TIMEs	   %H:%M:%S i   R   s   utf-8i   i    Rr   t   >t   <sN   CONFIG_TASK_DELAY_ACCT not enabled in kernel, cannot determine SWAPIN and IO %(%   R   R   t   rjustR¯   RÚ   R%   t   strftimeRG   t   quietR   t   joint   encodeRW   t   stdoutt   flushRH   t   eraseRv   RS   Rs   Rt   RJ   R   t   xrangeRn   RD   Rw   RF   R   RÊ   R]   R   RR   t   boolRN   RŽ   Rx   (   RO   t
   first_timeRg   Rh   R   t   summaryR=   t   titlest   linest   current_timeRˆ   t   remaining_colsRœ   RŸ   t   titlet
   status_msgt	   num_lines(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR_     sb    "	)		

		,+&N(   R6   R7   R…   R   RE   RP   RI   Rl   Rm   Rq   R]   R€   R‚   Rƒ   R„   R‡   R    R¨   Rª   R«   Re   RÚ   R_   (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR<   `   s4   					
				 			R	'c         C   s;   t  | ƒ } t | | ƒ } t |  | | ƒ } | j ƒ  d  S(   N(   R   R   R<   Rl   (   RH   R   R³   RC   t   ui(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   run_iotop_windowÆ  s    c         C   sƒ   y* |  j  r t d  |  ƒ St j t |  ƒ SWnR t k
 r~ } | j t j k rx t j	 | IJt j	 d IJt j
 d ƒ q ‚  n Xd  S(   Ns0   iotop requires root or the NET_ADMIN capability.i   (   RG   Rñ   R]   RJ   t   wrappert   OSErrorRb   t   EPERMRW   t   stderrR½   (   R   Rj   (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt	   run_iotopÌ  s    	c         C   s  d } yL d d  l  } d d  l } d GH| j d t ƒ  t ƒ  | ƒ | j | ƒ } Wnl t k
 rÀ d d  l } d d  l } | j	 | d d ƒ} d GH| j
 |  ƒ | j ƒ  | j j | ƒ } n X| j ƒ  | j d d	 ƒ | j d
 ƒ | j d
 ƒ t j | ƒ d  S(   Ns
   iotop.profiÿÿÿÿs   Profiling using cProfiles   continuation()t
   lineeventsi   s   Profiling using hotshotR%   t   callsi2   (   t   cProfilet   pstatst   runctxt   globalst   localsR   t   ImportErrort   hotshott   hotshot.statst   Profilet   runcallt   closeR/   t   loadt
   strip_dirst
   sort_statst   print_statst   print_calleest   ost   remove(   t   continuationt	   prof_fileRù   Rú   R/   Rÿ   t   prof(    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   _profileß  s(    

s,  %s [OPTIONS]

DISK READ and DISK WRITE are the block I/O bandwidth used during the sampling
period. SWAPIN and IO are the percentages of time the thread spent respectively
while swapping in and waiting on I/O more generally. PRIO is the I/O priority at
which the thread is running (set using the ionice command).

Controls: left and right arrows to change the sorting column, r to invert the
sorting order, o to toggle the --only option, p to toggle the --processes
option, a to toggle the --accumulated option, q to quit, any other key to force
a refresh.i    c             sã  y t  j t  j d ƒ Wn t  j k
 r2 d GHn Xt j d t d d t ƒ }  |  j d d d d	 d
 d d t	 d d ƒ|  j d d d d	 d
 d d d ƒ|  j d d d d d
 d d d d d ƒ|  j d d d d d
 d d d d d  d d! ƒ|  j d" d# d d d
 d$ d d% d d& d d' ƒ|  j d( d) d d* d
 d+ d d% d d, d d- ƒ|  j d. d/ d d	 d
 d0 d t	 d d1 ƒ|  j d2 d3 d d	 d
 d4 d t	 d d5 ƒ|  j d6 d7 d d	 d
 d8 d t	 d d9 ƒ|  j d: d; d d	 d
 d< d d= ƒ|  j d> d? d d@ d
 dA d dB d dC ƒ|  j dD d d	 d
 dE d t	 d t j
 ƒ|  j ƒ  \ ‰ } | rj|  j dF dG j | ƒ ƒ n  t ˆ ƒ ˆ j p€g  ˆ _ ˆ j pžˆ j pžˆ j ˆ _ ‡ f dH †  ‰  ˆ j rØ‡  f dI †  } t | ƒ n ˆ  ƒ  d  S(J   NR   s8   unable to set locale, falling back to the default localet   usaget   versions   iotop s   -os   --onlyRÈ   t
   store_truet   destR­   R}   t   helps1   only show processes or threads actually doing I/Os   -bs   --batchRG   s   non-interactive modes   -ns   --itert   typeR   R\   t   metavart   NUMs-   number of iterations before ending [infinite]s   -ds   --delayR   R`   s#   delay between iterations [1 second]t   SECi   s   -ps   --pidt   pidst   appends"   processes/threads to monitor [all]t   PIDs   -us   --usert   strt   userss   users to monitor [all]t   USERs   -Ps   --processesR¯   s$   only show processes, not all threadss   -as   --accumulatedR#   s)   show accumulated I/O instead of bandwidths   -ks   --kilobytesR   s.   use kilobytes instead of a human friendly units   -ts   --timeR%   s.   add a timestamp on each line (implies --batch)s   -qs   --quiett   countRß   i    s/   suppress some lines of header (implies --batch)s	   --profilet   profiles   Unexpected arguments: Rr   c              s
   t  ˆ  ƒ S(   N(   Rö   (    (   R   (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyR"   1  s    c              s   y ˆ  ƒ  Wn n Xd  S(   N(    (    (   t	   main_loop(    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   safe_main_loop4  s    (   t   localet	   setlocalet   LC_ALLt   Errort   optparset   OptionParsert   USAGER   t
   add_optionR…   t   SUPPRESS_HELPt
   parse_argsRN   Rà   R    R  RG   R%   Rß   R  R  (   t   parserRa   R!  (    (   R   R   s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   main  s\    	!!!
	(&   RJ   Rb   R"  R   R&  R	  RT   RW   R%   t
   iotop.dataR    R   R   R   R   t   iotop.versionR   Rµ   R   R   R   R   R   R4   t	   ExceptionR5   R8   R9   R:   R;   t   objectR<   Rñ   Rö   R  t   argvR(  R-  (    (    (    s,   /usr/lib/python2.7/dist-packages/iotop/ui.pyt   <module>   s<   "				ÿ g			$