B
    *d1                 @   s(  d 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	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z  ddlm!Z! ddlm"Z" ddlm#Z# ddlm$Z$ ddlm%Z% yddl
mZ& W nj e'k
r Z( zJe)e(* +dre, d d k rd!Z-e-d"7 Z-e-d#7 Z-e.e-n W ddZ([(X Y nX ej/d$krddl0Z0ndZ0d%d&d'd(d)d*d+d,d-d.d/d0d1d2gZ1d3Z2d4Z3d5ej4kZ5e0dkrLd6Z6ne07d7d2d6iZ8e8j6Z6e&j9ej:e&j;ej<e&j=ej>e&j?ej@e&jAejBe&jCejDe&jEejFe&jGejHe&jIejJe&jKejLe&jMejNe&jOe2e&jPejQiZRe0dk	rG d8d9 d9e0j7ZSeT UeSjV e0dkrdZWdZXd:ZYd;ZZn G d<d= d=e0j7Z[eT Ue[jV e\ddd:d;d>d?d d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOZ]e	dPdQdRdSdTdUgZ^e	dVdWdXdYdZd[gZ_e	d\d]d^d_d`dadbdcdddedfdgdhgZ`e	die`jadj Zbe	dkdld]gZce	dmdndodecja Zee	dpdqdrdsdtdudvgZfedwdxdydz Zgd{d| Zhed}d~ Zidd Zjdd Zke&jlZldd Zmdd Zndd Zodd Zpdd Zqdd Zrdd Zsdd Ztdaudd ZvdddZwdd Zxdd Zydd Zzdd Z{da|dd Z}dd Z~dd% Zdd& ZG dd deZe&jZe&jZe&jZdd ZdddZdd Zdd ZG dd deZdS )z Windows platform implementation.    N)
namedtuple   )_common)ENCODING)ENCODING_ERRS)AccessDenied)NoSuchProcess)TimeoutExpired)	conn_tmap)conn_to_ntuple)debug)isfile_strict)memoize)memoize_when_activated)parse_environ_block)usage_percent)PY3)long)	lru_cache)range)unicode)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_psutil_windowszdll load failed   z3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)      win_service_iterwin_service_getr   r   r   r   r   r   IOPRIO_VERYLOW
IOPRIO_LOWIOPRIO_NORMALIOPRIO_HIGHCONN_DELETE_TCBAF_LINKZ
DELETE_TCBi+  Z__pypy__AddressFamilyc               @   s$   e Zd ZeZeZeZeZeZeZdS )PriorityN)	__name__
__module____qualname__r   r   r   r   r   r    r/   r/   ^/work/yifan.wang/ringdown/master-ringdown-env/lib/python3.7/site-packages/psutil/_pswindows.pyr+   n   s   r+      r   c               @   s   e Zd ZdZdZdZdZdS )
IOPriorityr   r   r1   r   N)r,   r-   r.   r#   r$   r%   r&   r/   r/   r/   r0   r2   ~   s   r2   r             	   
                                    )num_handlesctx_switches	user_timekernel_timecreate_timenum_threads	io_rcount	io_wcount	io_rbytes	io_wbytesio_count_othersio_bytes_othersnum_page_faults	peak_wsetwsetpeak_paged_pool
paged_poolpeak_non_paged_poolnon_paged_poolpagefilepeak_pagefilemem_private	scputimesusersystemidle	interruptdpcsvmemtotal	availablepercentusedfreepmemrssvmsrO   rP   rQ   rR   rS   Zpeak_nonpaged_poolZnonpaged_poolrV   rW   privatepfullmem)usspmmap_groupedpath	pmmap_extzaddr perms  pioZ
read_countZwrite_count
read_byteswrite_bytesother_countZother_bytesi   )maxsizec             C   s@   d | ddd }t|}| t|d }tj ||S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt"
    \Nr   )joinsplitcextZQueryDosDevicelenosrl   )sZrawdriveZdriveletter	remainderr/   r/   r0   convert_dos_path   s    
r|   c             C   s&   t r| S t| tr| S | ttS dS )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    N)r   
isinstancestrencoder   r   )rz   r/   r/   r0   py2_strencode   s
    
r   c               C   s   t  S )N)rw   getpagesizer/   r/   r/   r0   r      s    r   c        
      C   sJ   t  } | \}}}}|}|}|}|| }t|| |dd}	t|||	||S )z&System virtual memory as a namedtuple.r   )round_)rw   virtual_memr   r_   )
memZtotphysZ	availphysZtotsysZavailsysr`   Zavailrd   rc   rb   r/   r/   r0   virtual_memory   s    r   c              C   sl   t  } | d }| d }|| }|dkrBt  }td| | }nd}|| }t|d}t||||ddS )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r1   g{Gz?r   )rw   r   Zswap_percentintroundr   Zsswap)r   Z
total_physZtotal_systemr`   Zpercentswaprc   rd   rb   r/   r/   r0   swap_memory   s    
r   c             C   sP   t rt| tr| jtdd} t| \}}|| }t||dd}t	||||S )z'Return disk usage associated with path.strict)errorsr   )r   )
r   r}   bytesdecoder   rw   
disk_usager   r   Z
sdiskusage)rl   r`   rd   rc   rb   r/   r/   r0   r     s    r   c             C   s   t | }dd |D S )zReturn disk partitions.c             S   s   g | ]}t j| qS r/   )r   Z	sdiskpart).0xr/   r/   r0   
<listcomp>!  s    z#disk_partitions.<locals>.<listcomp>)rw   disk_partitions)allrawlistr/   r/   r0   r     s    
r   c              C   s<   t  \} }}tdd tt   D  }t| |||j|jS )z)Return system CPU times as a named tuple.c             S   s   g | ]}t |qS r/   )sum)r   nr/   r/   r0   r   /  s    zcpu_times.<locals>.<listcomp>)rw   	cpu_timesrY   zipper_cpu_timesr]   r^   )rZ   r[   r\   Zpercpu_summedr/   r/   r0   r   )  s    r   c              C   s>   g } x4t  D ](\}}}}}t|||||}| | qW | S )z6Return system per-CPU times as a list of named tuples.)rw   r   rY   append)retrZ   r[   r\   r]   r^   itemr/   r/   r0   r   4  s
    r   c               C   s   t  S )z0Return the number of logical CPUs in the system.)rw   cpu_count_logicalr/   r/   r/   r0   r   =  s    r   c               C   s   t  S )z-Return the number of CPU cores in the system.)rw   cpu_count_coresr/   r/   r/   r0   r   B  s    r   c              C   s$   t  \} }}}d}t| |||S )zReturn CPU statistics.r   )rw   	cpu_statsr   Z	scpustats)rD   Z
interruptsZdpcsZsyscallsZsoft_interruptsr/   r/   r0   r   G  s    
r   c              C   s(   t  \} }d}tt| |t|gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    g        )rw   cpu_freqr   Zscpufreqfloat)currZmax_Zmin_r/   r/   r0   r   O  s    r   Fc              C   s*   t st  da t } tdd | D S )z~Return the number of processes in the system run queue averaged
    over the last 1, 5, and 15 minutes respectively as a tupleTc             S   s   g | ]}t |d qS )r1   )r   )r   loadr/   r/   r0   r   f  s    zgetloadavg.<locals>.<listcomp>)_loadavg_inititializedrw   Zinit_loadavg_counter
getloadavgtuple)Z	raw_loadsr/   r/   r0   r   [  s
    r   c             C   s   | t kr(td| ddd t D f t |  \}}t|||}t }xL|D ]D}|\}}}	}
}}}t|||	|
||t|dkr|ndd}|| qNW t	|S )zReturn socket connections.  If pid == -1 return system-wide
    connections (as opposed to connections opened by one process only).
    z+invalid %r kind argument; choose between %sz, c             S   s   g | ]}t |qS r/   )repr)r   r   r/   r/   r0   r   t  s    z#net_connections.<locals>.<listcomp>r)   N)pid)
r
   
ValueErrorru   rw   net_connectionssetr   TCP_STATUSESaddlist)kind_pidZfamiliestypesr   r   r   fdfamtypeladdrraddrstatusr   ntr/   r/   r0   r   n  s    
r   c              C   s~   i } t  }xl| D ]`\}}ts@t|ts8tt|t|}|\}}}}t	t
dr`t
|}t
||||d| |< qW | S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex )rw   net_if_statsitemsr   r}   r   AssertionErrorr   r   hasattrr   r   Z	snicstats)r   Zrawdictnamer   ZisupZduplexspeedZmtur/   r/   r0   r     s    

r   c              C   s   t  } tdd |  D S )zsReturn network I/O statistics for every network interface
    installed on the system as a dict of raw tuples.
    c             S   s   g | ]\}}t ||fqS r/   )r   )r   kvr/   r/   r0   r     s    z#net_io_counters.<locals>.<listcomp>)rw   net_io_countersdictr   )r   r/   r/   r0   r     s    r   c              C   s<   g } x2t  D ]&}t|}t|d |d< | | qW | S )z,Return the addresses associated to each NIC.r   )rw   net_if_addrsr   r   r   )r   r   r/   r/   r0   r     s    r   c              C   sd   t  \} }}}| dk}t|d@ }t|d@ }|r8dS |s@|rHtj}n|dkrVtj}t|||S )zReturn battery information.r      r5   Nr)   )rw   sensors_batteryboolr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Zacline_statusflagsrb   ZsecsleftZpower_pluggedZ
no_batteryZchargingr/   r/   r0   r     s    r   c              C   s,   t t } t| t dkr tS | a| S dS )z:The system boot time expressed in seconds since the epoch.r   N)r   rw   	boot_timeabs_last_btime)r   r/   r/   r0   r     s
    r   c              C   sL   g } t  }x:|D ]2}|\}}}t|}t|d||d}| | qW | S )z:Return currently connected users as a list of namedtuples.N)rw   usersr   r   Zsuserr   )retlistr   r   rZ   hostnameZtstampr   r/   r/   r0   r     s    

r   c              c   s.   x(t  D ]\} }tt| t|V  q
W dS )z*Yields a list of WindowsService instances.N)rw   Zwinservice_enumerateWindowsServicer   )r   display_namer/   r/   r0   r!     s    c             C   s   t | d}| d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr   )r   _query_config_display_name)r   Zservicer/   r/   r0   r"     s    
c               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
ejdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zd d! Zd"d# Zd$S )%r   z(Represents an installed Windows service.c             C   s   || _ || _d S )N)_namer   )selfr   r   r/   r/   r0   __init__  s    zWindowsService.__init__c             C   s    d| j | jf }d| jj|f S )Nz(name=%r, display_name=%r)z%s%s)r   r   	__class__r,   )r   detailsr/   r/   r0   __str__  s    zWindowsService.__str__c             C   s   d|   t| f S )Nz
<%s at %s>)r   id)r   r/   r/   r0   __repr__  s    zWindowsService.__repr__c             C   s   t |tstS | j|jkS )N)r}   r   NotImplementedr   )r   otherr/   r/   r0   __eq__  s    
zWindowsService.__eq__c             C   s
   | |k S )Nr/   )r   r   r/   r/   r0   __ne__  s    zWindowsService.__ne__c          	   C   sH   |    t| j\}}}}W d Q R X tt|t|t|t|dS )N)r   binpathusername
start_type)_wrap_exceptionsrw   Zwinservice_query_configr   r   r   )r   r   r   r   r   r/   r/   r0   r     s    
zWindowsService._query_configc          	   C   s<   |    t| j\}}W d Q R X |dkr0d }t||dS )Nr   )r   r   )r   rw   Zwinservice_query_statusr   r   )r   r   r   r/   r/   r0   _query_status  s
    
zWindowsService._query_statusc          
   c   s~   y
dV  W nn t k
rx } zPt|r<td| jd| j dn,|jtjtjfkrftd| jd| j dn W dd}~X Y nX dS )z{Ctx manager which translates bare OSError and WindowsError
        exceptions into NoSuchProcess and AccessDenied.
        Nz2service %r is not querable (not enough privileges))r   r   msgzservice %r does not exist))	OSErroris_permission_errr   r   winerrorrw   ZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr   )r   errr/   r/   r0   r     s    

zWindowsService._wrap_exceptionsc             C   s   | j S )zThe service name. This string is how a service is referenced
        and can be passed to win_service_get() to get a new
        WindowsService instance.
        )r   )r   r/   r/   r0   r   0  s    zWindowsService.namec             C   s   | j S )z_The service display name. The value is cached when this class
        is instantiated.
        )r   )r   r/   r/   r0   r   7  s    zWindowsService.display_namec             C   s   |   d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r   )r   )r   r/   r/   r0   r   =  s    zWindowsService.binpathc             C   s   |   d S )z,The name of the user that owns this service.r   )r   )r   r/   r/   r0   r   C  s    zWindowsService.usernamec             C   s   |   d S )zRA string which can either be "automatic", "manual" or
        "disabled".
        r   )r   )r   r/   r/   r0   r   G  s    zWindowsService.start_typec             C   s   |   d S )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   )r   )r   r/   r/   r0   r   O  s    zWindowsService.pidc             C   s   |   d S )zService status as a string.r   )r   )r   r/   r/   r0   r   U  s    zWindowsService.statusc             C   s   t t|  S )zService long description.)r   rw   Zwinservice_query_descrr   )r   r/   r/   r0   descriptionY  s    zWindowsService.descriptionc             C   s>   |   }||   |  |d< |  |d< |  |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r   r   )r   updater   r   r   r   )r   dr/   r/   r0   as_dict_  s    zWindowsService.as_dictN)r,   r-   r.   __doc__r   r   r   r   r   r   r   
contextlibcontextmanagerr   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   r     s$   r   c             C   s<   t | tst| | jtjtjfkp:t| ddtjtj	fkS )z*Return True if this is a permission error.r   r)   )
r}   r   r   errnoEPERMEACCESgetattrrw   ZERROR_ACCESS_DENIEDZERROR_PRIVILEGE_NOT_HELD)excr/   r/   r0   r     s    r   c             C   sF   t | tst| t| r&t||dS | jtjkr>t||dS | dS )z3Convert OSError into NoSuchProcess or AccessDenied.)r   r   N)r}   r   r   r   r   r   ZESRCHr   )r   r   r   r/   r/   r0   convert_oserror  s    r   c                s   t   fdd}|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c          
      sJ   y | f||S  t k
rD } zt|| j| jdW d d }~X Y nX d S )N)r   r   )r   r   r   r   )r   argskwargsr   )funr/   r0   wrapper  s    z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   r/   )r   r0   wrap_exceptions  s    r   c                s   t   fdd}|S )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745
    c                s   d}d}xt |D ]d}y | f||S  tk
rt } z0|}|jtkrbt| t|d d}wn W d d }~X Y qX qW d ||f }t| j| j	|dd S )Ng-C6?!   r1   g{Gz?zI%s retried %s times, converted to AccessDenied as it's still returning %r)r   r   r   )
r   WindowsErrorr   ERROR_PARTIAL_COPYtimesleepminr   r   r   )r   r   r   delaytimes_r   r   )r   r/   r0   r     s    

z)retry_error_partial_copy.<locals>.wrapper)r   r   )r   r   r/   )r   r0   retry_error_partial_copy  s    r  c               @   s  e Zd ZdZddddgZdd Zdd	 Zd
d Zedd Z	dd Z
eedd Zeedd Zeedd Zdd Zdd Zedd Zedd Zdd Zed d! Zed"d# ZedPd%d&Zed'd( Zed)d* Zed+d, Zed-d. Zed/d0 Zed1d2 Zed3d4 Zeed5d6 Zed7d8 Z edQd:d;Z!ed<d= Z"ed>d? Z#ed@dA Z$edBdC Z%edDdE Z&edFdG Z'edHdI Z(edJdK Z)edLdM Z*edNdO Z+d$S )RProcessz1Wrapper class around underlying C implementation.r   r   _ppid_cachec             C   s   || _ d | _d | _d S )N)r   r   r  )r   r   r/   r/   r0   r     s    zProcess.__init__c             C   s   | j |  | j|  d S )N)
_proc_infoZcache_activateexe)r   r/   r/   r0   oneshot_enter  s    zProcess.oneshot_enterc             C   s   | j |  | j|  d S )N)r
  Zcache_deactivater  )r   r/   r/   r0   oneshot_exit  s    zProcess.oneshot_exitc             C   s$   t | j}t|ttks t|S )zOReturn multiple information about this process as a
        raw tuple.
        )rw   Z	proc_infor   rx   	pinfo_mapr   )r   r   r/   r/   r0   r
    s    zProcess._proc_infoc             C   s,   | j dkrdS | j dkrdS tj|  S )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr    System)r   ry   rl   basenamer  )r   r/   r/   r0   r     s
    

zProcess.namec          
   C   s   t r`yt| j}W ql tk
r\ } z*|jdkrJtd|  t| j| j W d d }~X Y qlX nt| j}t	sxt
|}|drt|S |S )N   z%r translated into AccessDeniedrt   )PYPYrw   Zproc_exer   r   r   r   r   r   r   r   
startswithr|   )r   r  r   r/   r/   r0   r    s    

zProcess.exec          
   C   s   t jt jkrbyt j| jdd}W qr tk
r^ } z t|rLt j| jdd}n W d d }~X Y qrX nt j| jdd}trz|S dd |D S d S )NT)Zuse_pebFc             S   s   g | ]}t |qS r/   )r   )r   rz   r/   r/   r0   r   &  s    z#Process.cmdline.<locals>.<listcomp>)rw   ZWINVERZWINDOWS_8_1Zproc_cmdliner   r   r   r   )r   r   r   r/   r/   r0   cmdline  s    zProcess.cmdlinec             C   s6   t | j}|r*ts*t|ts*tt|tt	|S )N)
rw   Zproc_environr   r   r}   r   r   r   r   r   )r   Zustrr/   r/   r0   environ(  s    zProcess.environc             C   s4   yt  | j S  tk
r.   t| j| jY nX d S )N)ppid_mapr   KeyErrorr   r   )r   r/   r/   r0   ppid0  s    zProcess.ppidc             C   s   yt | jS  tk
r } z~t|r|  }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
S  W d d }~X Y nX d S )NrO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   )rw   Zproc_memory_infor   r   r   r
  r  )r   r   infor/   r/   r0   _get_raw_meminfo6  s     








zProcess._get_raw_meminfoc             C   s(   |   }|d }|d }t||f|  S )Nr1   r4   )r  re   )r   trf   rg   r/   r/   r0   memory_infoL  s    zProcess.memory_infoc             C   s,   |   }t| j}|t 9 }t||f  S )N)r  rw   Zproc_memory_ussr   r   ri   )r   Z	basic_memrj   r/   r/   r0   memory_full_infoV  s    
zProcess.memory_full_infoc          
   c   s   yt | j}W n2 tk
rB } zt|| j| jW d d }~X Y nBX x>|D ]6\}}}}t|}tsjt|}t	|}||||fV  qJW d S )N)
rw   Zproc_memory_mapsr   r   r   r   r|   r   r   hex)r   rawr   addrZpermrl   rf   r/   r/   r0   memory_maps]  s    "zProcess.memory_mapsc             C   s   t | jS )N)rw   	proc_killr   )r   r/   r/   r0   killl  s    zProcess.killc             C   sT   |t jkrt| j n8|tt dt tt dt fkrHt| j| nt	dd S )NZCTRL_C_EVENTZCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMrw   r"  r   r   objectry   r#  r   )r   sigr/   r/   r0   send_signalp  s    
zProcess.send_signalNc             C   s   |d krt j}nt|d }ttdtj}|d k	r<| | nd }yt | j|}W n> t jk
rx   t|| j| jY n t j	k
r   d }Y nX d}xJt
| js|S |r| |krt|| j| jdt| t|d d}qW d S )Ni  	monotonicg-C6?)r   r   r1   g{Gz?)rw   ZINFINITEr   r   r   Z	proc_waitr   r	   r   ZTimeoutAbandoned
pid_existsr  r  )r   timeoutZcext_timeouttimerZstop_at	exit_coder  r/   r/   r0   wait}  s&    	


zProcess.waitc             C   s2   | j dkrdS t| j \}}t|d t| S )N)r   r    zNT AUTHORITY\SYSTEMrt   )r   rw   Zproc_usernamer   )r   domainrZ   r/   r/   r0   r     s    
zProcess.usernamec          
   C   sX   yt | j\}}}|S  tk
rR } zt|r@|  td  S  W d d }~X Y nX d S )NrG   )rw   
proc_timesr   r   r   r
  r  )r   rZ   r[   createdr   r/   r/   r0   rG     s    zProcess.create_timec             C   s   |   td  S )NrH   )r
  r  )r   r/   r/   r0   rH     s    zProcess.num_threadsc             C   s@   t | j}g }x*|D ]"\}}}t|||}|| qW |S )N)rw   Zproc_threadsr   r   Zpthreadr   )r   r   r   	thread_idutimeZstimentupler/   r/   r0   threads  s    zProcess.threadsc          
   C   st   yt | j\}}}W nL tk
rb } z.t|s2 |  }|td  }|td  }W d d }~X Y nX t||ddS )NrE   rF   g        )	rw   r0  r   r   r   r
  r  r   Z	pcputimes)r   rZ   r[   r1  r   r  r/   r/   r0   r     s    zProcess.cpu_timesc             C   s   t | jd d S )NT)rw   proc_suspend_or_resumer   )r   r/   r/   r0   suspend  s    zProcess.suspendc             C   s   t | jd d S )NF)rw   r6  r   )r   r/   r/   r0   resume  s    zProcess.resumec             C   s4   | j dkrt| j | jt| j }ttj|S )N)r   r    )	r   r   r   rw   Zproc_cwdr   ry   rl   normpath)r   rl   r/   r/   r0   cwd  s    
zProcess.cwdc             C   sh   | j dkrg S t }t| j }x>|D ]6}t|}t|r&tsFt|}t	|d}|
| q&W t|S )N)r   r    r)   )r   r   rw   Zproc_open_filesr|   r   r   r   r   Z	popenfiler   r   )r   r   Zraw_file_names_filer4  r/   r/   r0   
open_files  s    

zProcess.open_filesinetc             C   s   t || jdS )N)r   )r   r   )r   r   r/   r/   r0   connections  s    zProcess.connectionsc             C   s    t | j}td k	rt|}|S )N)rw   Zproc_priority_getr   enumr+   )r   valuer/   r/   r0   nice_get  s    zProcess.nice_getc             C   s   t | j|S )N)rw   Zproc_priority_setr   )r   r@  r/   r/   r0   nice_set  s    zProcess.nice_setc             C   s    t | j}td k	rt|}|S )N)rw   Zproc_io_priority_getr   r?  r2   )r   r   r/   r/   r0   
ionice_get	  s    zProcess.ionice_getc             C   s:   |rt d|ttttfkr(td| t| j| d S )Nz&value argument not accepted on Windowsz%s is not a valid priority)		TypeErrorr#   r$   r%   r&   r   rw   Zproc_io_priority_setr   )r   Zioclassr@  r/   r/   r0   
ionice_set  s    zProcess.ionice_setc             C   s   yt | j}W nt tk
r } zVt|s, |  }|td  |td  |td  |td  |td  |td  f}W d d }~X Y nX t| S )NrI   rJ   rK   rL   rM   rN   )rw   Zproc_io_countersr   r   r   r
  r  ro   )r   r   r   r  r/   r/   r0   io_counters  s    




 zProcess.io_countersc             C   s    t | j}|rtjS tjS d S )N)rw   Zproc_is_suspendedr   r   ZSTATUS_STOPPEDZSTATUS_RUNNING)r   Z	suspendedr/   r/   r0   r   +  s    zProcess.statusc             C   s   dd }t | j}||S )Nc                s    fddt dD S )Nc                s   g | ]}d |>  @ r|qS )r   r/   )r   i)r   r/   r0   r   6  s    zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>@   )r   )r   r/   )r   r0   from_bitmask5  s    z.Process.cpu_affinity_get.<locals>.from_bitmask)rw   Zproc_cpu_affinity_getr   )r   rI  bitmaskr/   r/   r0   cpu_affinity_get3  s    zProcess.cpu_affinity_getc             C   sr   dd }t ttt }x<|D ]4}||kr t|ttfsHtd| q td| q W ||}t	
| j| d S )Nc             S   s2   | st d|  d}x| D ]}|d| O }qW |S )Nzinvalid argument %rr   r1   )r   )Zlsoutbr/   r/   r0   
to_bitmask<  s    
z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)r   r   rx   r   r}   r   r   rD  r   rw   Zproc_cpu_affinity_setr   )r   r@  rN  ZallcpuscpurJ  r/   r/   r0   cpu_affinity_set:  s    
zProcess.cpu_affinity_setc          
   C   sN   yt | jS  tk
rH } zt|r6|  td  S  W d d }~X Y nX d S )NrC   )rw   Zproc_num_handlesr   r   r   r
  r  )r   r   r/   r/   r0   rC   S  s    zProcess.num_handlesc             C   s   |   td  }t|dS )NrD   r   )r
  r  r   Zpctxsw)r   rD   r/   r/   r0   num_ctx_switches\  s    zProcess.num_ctx_switches)N)r=  ),r,   r-   r.   r   	__slots__r   r  r  r   r
  r   r   r  r  r  r  r  r  r  r  r!  r#  r(  r.  r   rG   rH   r5  r   r7  r8  r:  r<  r>  rA  rB  rC  rE  rF  r   rK  rP  rC   rQ  r/   r/   r/   r0   r    sX   	
*				r  )r)   )NN)r   r   r   r   ry   r$  sysr   collectionsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   Z_compatr   r   r   r   r   r   r   r   r   r   r   r   rw   ImportErrorr   r~   lowerr  getwindowsversionr   RuntimeErrorversion_infor?  Z__extra__all__r'   r   builtin_module_namesr  r(   IntEnumr*   ZMIB_TCP_STATE_ESTABZCONN_ESTABLISHEDZMIB_TCP_STATE_SYN_SENTZCONN_SYN_SENTZMIB_TCP_STATE_SYN_RCVDZCONN_SYN_RECVZMIB_TCP_STATE_FIN_WAIT1ZCONN_FIN_WAIT1ZMIB_TCP_STATE_FIN_WAIT2ZCONN_FIN_WAIT2ZMIB_TCP_STATE_TIME_WAITZCONN_TIME_WAITZMIB_TCP_STATE_CLOSEDZ
CONN_CLOSEZMIB_TCP_STATE_CLOSE_WAITZCONN_CLOSE_WAITZMIB_TCP_STATE_LAST_ACKZCONN_LAST_ACKZMIB_TCP_STATE_LISTENZCONN_LISTENZMIB_TCP_STATE_CLOSINGZCONN_CLOSINGZMIB_TCP_STATE_DELETE_TCBZPSUTIL_CONN_NONEZ	CONN_NONEr   r+   globalsr   __members__r#   r$   r%   r&   r2   r   r  rY   r_   re   _fieldsri   rk   ru   rm   ro   r|   r   r   r   r   Zdisk_io_countersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r"   r&  r   Zpidsr*  r  r   r   r   r  r  r/   r/   r/   r0   <module>   s8  








		
 *

