<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
JZa              (   @   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mZ ddlm	Z	 yddlm
Z W nl ek
r Z zPeej jdrej d dk rd	Zed
7 Zed7 Zed7 Zeen W Y ddZ[X nX 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, ej-dkrddl.Z.ndZ.d&d'd(d)d*d+d,d-d.d/g
Z/d0Z0d1Z1e2ej3ej4ej5gZ6e2ej7ej8gZ9e.dkrDdZ:ne.j;d2d/diZ<e<j:Z:ej=e	j>ej?e	j@ejAe	jBejCe	jDejEe	jFejGe	jHejIe	jJejKe	jLejMe	jNejOe	jPejQe	jRejSe0ejTe	jUiZVe.dk	rG d3d4 d4e.j;ZWeX jYeWjZ e[ddd5d$d%d6dd7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFZ\edGdHdIdJdKdLgZ]edMdNdOdPdQdRgZ^edSdTdUdVdWdXdYdZd[d\d]d^d_gZ_ed`e_j`d ZaedbdcdTgZbedddedfjcebj` ZdedgdhdidjdkdldmgZeedndodpdq Zfdrds Zgdtdu Zhdvdw ZiejjZjdxdy Zkdzd{ Zld|d} Zmd~d Zndd Zodd Zpdd Zqdd ZrdddZsdd Ztdd Zudd Zvdd Zwdaxdd Zydd Zzdd& Z{dd' Z|G dd de}Z~ejZejZejZdd ZG dd de}ZdS )z Windows platform implementation.    N)
namedtuple   )_common)_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 z92000, XP and 2003 server; it may be possible that psutil z)will work if compiled from sources though)	conn_tmap)ENCODING)ENCODING_ERRS)isfile_strict)memoize_when_activated)parse_environ_block)sockfam_to_enum)socktype_to_enum)usage_percent)long)	lru_cache)PY3)unicode)xrange)AccessDenied)NoSuchProcess)TimeoutExpired)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS      win_service_iterwin_service_getr   r   r   r   r   r   CONN_DELETE_TCBAF_LINKZ
DELETE_TCBi  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)   "/usr/lib64/python3.6/_pswindows.pyr%   o   s   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totalZ	availablepercentusedfreepmemrssvmsrH   rI   rJ   rK   rL   Zpeak_nonpaged_poolZnonpaged_poolrO   rP   Zprivatepfullmemusspmmap_groupedpath	pmmap_extzaddr perms  pioZ
read_countZwrite_countZ
read_bytesZwrite_bytesother_countZother_bytesi   )maxsizec             C   s<   dj | jddd }tj|}tjj || t|d S )zConvert paths using native DOS format like:
        "\Device\HarddiskVolume1\Windows\systemew\file.txt"
    into:
        "C:\Windows\systemew\file.txt"
    \Nr   )joinsplitcextZwin32_QueryDosDeviceosrc   len)sZrawdriveZdriveletterr)   r)   r*   convert_dos_path   s    
rp   c             C   s(   t r| S t| tr| S | jttdS dS )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    )errorsN)r   
isinstancestrencoder   r	   )ro   r)   r)   r*   py2_strencode   s
    
ru   c              C   sN   t j } | \}}}}}}|}|}|}	|| }
t|| |dd}t||||
|	S )z&System virtual memory as a namedtuple.r   )_round)rl   virtual_memr   rX   )memZtotphysZ	availphysZtotpagefZ
availpagefZtotvirtZfreevirtrY   Zavailr\   r[   rZ   r)   r)   r*   virtual_memory   s    ry   c              C   sB   t j } | d }| d }|| }t||dd}tj||||ddS )z=Swap system memory as a (total, used, free, sin, sout) tuple.r+   r   r   )rv   r   )rl   rw   r   r   Zsswap)rx   rY   r\   r[   rZ   r)   r)   r*   swap_memory   s    rz   c             C   sP   t rt| tr| jtdd} tj| \}}|| }t||dd}tj	||||S )z'Return disk usage associated with path.strict)rq   r   )rv   )
r   rr   bytesdecoder   rl   
disk_usager   r   Z
sdiskusage)rc   rY   r\   r[   rZ   r)   r)   r*   r~      s    r~   c             C   s   t j| }dd |D S )zReturn disk partitions.c             S   s   g | ]}t j| qS r)   )r   Z	sdiskpart).0xr)   r)   r*   
<listcomp>  s    z#disk_partitions.<locals>.<listcomp>)rl   disk_partitions)allrawlistr)   r)   r*   r      s    
r   c              C   s<   t j \} }}tdd tt j  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)   r*   r     s    zcpu_times.<locals>.<listcomp>)rl   	cpu_timesrR   zipper_cpu_timesrV   rW   )rS   rT   rU   Zpercpu_summedr)   r)   r*   r   	  s    r   c              C   s>   g } x4t j D ](\}}}}}t|||||}| j| qW | S )z6Return system per-CPU times as a list of named tuples.)rl   r   rR   append)retrS   rT   rU   rV   rW   itemr)   r)   r*   r     s
    r   c               C   s   t j S )z0Return the number of logical CPUs in the system.)rl   cpu_count_logicalr)   r)   r)   r*   r     s    r   c               C   s   t j S )z1Return the number of physical CPUs in the system.)rl   Zcpu_count_physr)   r)   r)   r*   cpu_count_physical"  s    r   c              C   s$   t j \} }}}d}tj| |||S )zReturn CPU statistics.r   )rl   	cpu_statsr   Z	scpustats)r=   Z
interruptsZdpcsZsyscallsZsoft_interruptsr)   r)   r*   r   '  s    
r   c              C   s(   t j \} }d}tjt| |t|gS )zMReturn CPU frequency.
    On Windows per-cpu frequency is not supported.
    g        )rl   cpu_freqr   Zscpufreqfloat)ZcurrZmax_Zmin_r)   r)   r*   r   /  s    r   c          	   C   s   | t kr(td| djdd t D f t |  \}}tj|||}t }x|D ]}|\}}}	}
}}}|
rrtj|
 }
|rtj| }t| }t	|}t
|	}	|dkrtj|||	|
|||}ntj|||	|
||}|j| 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)   r*   r   C  s    z#net_connections.<locals>.<listcomp>r   )r   
ValueErrorrj   rl   net_connectionssetr   addrTCP_STATUSESr   r   ZsconnZpconnaddlist)kind_pidZfamiliestypesr   r   r   fdZfamtypeZladdrZraddrstatuspidntr)   r)   r*   r   =  s(    


r   c              C   s|   i } t j }xj|j D ]^\}}ts@t|ts8tt|t|}|\}}}}t	t
dr`t
j|}t
j||||| |< qW | S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex)rl   net_if_statsitemsr   rr   r   AssertionErrorr   ru   hasattrr   r   Z	snicstats)r   Zrawdictnamer   ZisupZduplexZspeedZmtur)   r)   r*   r   X  s    

r   c              C   s   t j } tdd | j 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)   )ru   )r   kvr)   r)   r*   r   l  s    z#net_io_counters.<locals>.<listcomp>)rl   net_io_countersdictr   )r   r)   r)   r*   r   g  s    r   c              C   s<   g } x2t j D ]&}t|}t|d |d< | j| qW | S )z,Return the addresses associated to each NIC.r   )rl   net_if_addrsr   ru   r   )r   r   r)   r)   r*   r   o  s    r   c              C   sd   t j \} }}}| dk}t|d@ }t|d@ }|r8dS |s@|rHtj}n|dkrVtj}tj|||S )zReturn battery information.r      r.   Nr   )rl   sensors_batteryboolr   ZPOWER_TIME_UNLIMITEDZPOWER_TIME_UNKNOWNZsbattery)Zacline_statusflagsrZ   ZsecsleftZpower_pluggedZ
no_batteryZchargingr)   r)   r*   r   ~  s    r   c              C   s,   t tj } 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   rl   	boot_timeabs_last_btime)r   r)   r)   r*   r     s
    r   c              C   sL   g } t j }x:|D ]2}|\}}}t|}tj|d||d}| j| qW | S )z:Return currently connected users as a list of namedtuples.N)rl   usersru   r   Zsuserr   )retlistr   r   rS   ZhostnameZtstampr   r)   r)   r*   r     s    

r   c              c   s.   x(t j D ]\} }tt| t|V  q
W dS )z*Yields a list of WindowsService instances.N)rl   Zwinservice_enumerateWindowsServiceru   )r   display_namer)   r)   r*   r      s    c             C   s   t | d}|j d |_|S )zBOpen a Windows service and return it as a WindowsService instance.Nr   )r   _query_config_display_name)r   Zservicer)   r)   r*   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)   r*   __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   Zdetailsr)   r)   r*   __str__  s    zWindowsService.__str__c             C   s   d| j  t| f S )Nz
<%s at %s>)r   id)r   r)   r)   r*   __repr__  s    zWindowsService.__repr__c             C   s   t |tstS | j|jkS )N)rr   r   NotImplementedr   )r   otherr)   r)   r*   __eq__  s    
zWindowsService.__eq__c             C   s
   | |k S )Nr)   )r   r   r)   r)   r*   __ne__  s    zWindowsService.__ne__c             C   sH   | j   tj| j\}}}}W d Q R X tt|t|t|t|dS )N)r   binpathusername
start_type)_wrap_exceptionsrl   Zwinservice_query_configr   r   ru   )r   r   r   r   r   r)   r)   r*   r     s    
zWindowsService._query_configc             C   s<   | j   tj| j\}}W d Q R X |dkr0d }t||dS )Nr   )r   r   )r   rl   Zwinservice_query_statusr   r   )r   r   r   r)   r)   r*   _query_status  s
    
zWindowsService._query_statusc             c   s   y
dV  W nr t k
r| } zV|jtkr>td| jd| j dn.|jtksR|jtkrjtd| jd| j dn W Y dd}~X 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))ZWindowsErrorerrnoACCESS_DENIED_ERRSETr   r   NO_SUCH_SERVICE_ERRSETZwinerrorr   )r   errr)   r)   r*   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)   r*   r     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)   r*   r     s    zWindowsService.display_namec             C   s   | j  d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r   )r   )r   r)   r)   r*   r     s    zWindowsService.binpathc             C   s   | j  d S )z,The name of the user that owns this service.r   )r   )r   r)   r)   r*   r     s    zWindowsService.usernamec             C   s   | j  d S )zRA string which can either be "automatic", "manual" or
        "disabled".
        r   )r   )r   r)   r)   r*   r     s    zWindowsService.start_typec             C   s   | j  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)   r*   r   '  s    zWindowsService.pidc             C   s   | j  d S )zService status as a string.r   )r   )r   r)   r)   r*   r   -  s    zWindowsService.statusc             C   s   t tj| j S )zService long description.)ru   rl   Zwinservice_query_descrr   )r   r)   r)   r*   description1  s    zWindowsService.descriptionc             C   s>   | j  }|j| j  | j |d< | j |d< | j |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r   r   )r   updater   r   r   r   )r   dr)   r)   r*   as_dict7  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)   r*   r     s$   r   c                s   t j  fdd}|S )zqDecorator which translates bare OSError and WindowsError
    exceptions into NoSuchProcess and AccessDenied.
    c                sl   y | f||S  t k
rf } z:|jtkr:t| j| j|jtjkrTt| j| j W Y d d }~X nX d S )N)OSErrorr   r   r   r   r   ESRCHr   )r   argskwargsr   )funr)   r*   wrapperx  s    
z wrap_exceptions.<locals>.wrapper)	functoolswraps)r   r   r)   )r   r*   wrap_exceptionst  s    
r   c               @   s  e Zd ZdZdddgZdd Zdd Zd	d
 Zedd Z	e
dd Ze
dd Ze
dd Z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.d/ Ze
d0d1 Ze
d2d3 Ze
d4d5 Ze
d6d7 Ze
dQd9d:Z e
d;d< Z!e
d=d> Z"e#e$d?rve
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   _ppidc             C   s   || _ d | _d | _d S )N)r   r   r   )r   r   r)   r)   r*   r     s    zProcess.__init__c             C   s   | j j  d S )N)oneshot_infoZcache_activate)r   r)   r)   r*   oneshot_enter  s    zProcess.oneshot_enterc             C   s   | j j  d S )N)r   Zcache_deactivate)r   r)   r)   r*   oneshot_exit  s    zProcess.oneshot_exitc             C   s$   t j| j}t|ttks t|S )zOReturn multiple information about this process as a
        raw tuple.
        )rl   Z	proc_infor   rn   	pinfo_mapr   )r   r   r)   r)   r*   r     s    zProcess.oneshot_infoc             C   sV   | j dkrdS | j dkrdS yttjj| j S  tk
rP   ttj| j S X dS )zbReturn process name, which on Windows is always the final
        part of the executable.
        r   zSystem Idle Processr   ZSystemN)	r   ru   rm   rc   basenameexer   rl   Z	proc_name)r   r)   r)   r*   r     s    

zProcess.namec             C   s,   | j dkrt| j | jtttj| j S )Nr   r   )r   r   )r   r   r   ru   rp   rl   Zproc_exe)r   r)   r)   r*   r     s    
zProcess.exec             C   s&   t j| j}tr|S dd |D S d S )Nc             S   s   g | ]}t |qS r)   )ru   )r   ro   r)   r)   r*   r     s    z#Process.cmdline.<locals>.<listcomp>)rl   Zproc_cmdliner   r   )r   r   r)   r)   r*   cmdline  s    zProcess.cmdlinec             C   s8   t j| j}|r,t r,t|ts,tt|tt	|S )N)
rl   Zproc_environr   r   rr   r   r   r   r   ru   )r   Zustrr)   r)   r*   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)   r*   ppid  s    zProcess.ppidc             C   s   yt j| jS  tk
r } z|jtkr| j }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
S  W Y d d }~X nX d S )NrH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   )rl   Zproc_memory_infor   r   r   r   r   r   )r   r   infor)   r)   r*   _get_raw_meminfo  s     









zProcess._get_raw_meminfoc             C   s(   | j  }|d }|d }t||f|  S )Nr+   r-   )r   r]   )r   tr^   r_   r)   r)   r*   memory_info  s    zProcess.memory_infoc             C   s"   | j  }tj| j}t||f  S )N)r   rl   Zproc_memory_ussr   r`   )r   Z	basic_memra   r)   r)   r*   memory_full_info  s    zProcess.memory_full_infoc             c   s   yt j| j}W nV tk
rf } z:|jtkr:t| j| j|jtjkrTt	| j| j W Y d d }~X nXX xT|D ]L\}}}}t
|}tst|tstt|t|}t|}||||fV  qnW d S )N)rl   Zproc_memory_mapsr   r   r   r   r   r   r   r   rp   r   rr   r   r   r   ru   hex)r   rawr   r   Zpermrc   r^   r)   r)   r*   memory_maps  s    
zProcess.memory_mapsc             C   s   t j| jS )N)rl   Z	proc_killr   )r   r)   r)   r*   kill  s    zProcess.killc             C   s   t j| j| d S )N)rm   r   r   )r   Zsigr)   r)   r*   send_signal  s    zProcess.send_signalNc             C   sr   |d krt j}nt|d }xPt j| j|}|tkrDt|| j| jt| jrj|d krZqnt|| j| j|S d S )Ni  )	rl   ZINFINITEintZ	proc_waitr   WAIT_TIMEOUTr   r   
pid_exists)r   ZtimeoutZcext_timeoutr   r)   r)   r*   wait  s    
zProcess.waitc             C   s2   | j dkrdS tj| j \}}t|d t| S )Nr   r   zNT AUTHORITY\SYSTEMri   )r   r   )r   rl   Zproc_usernameru   )r   ZdomainrS   r)   r)   r*   r   (  s    
zProcess.usernamec             C   s`   | j dkrt S ytj| j S  tk
rZ } z"|jtkrH| j td  S  W Y d d }~X nX d S )Nr   r   r@   )r   r   )	r   r   rl   Zproc_create_timer   r   r   r   r   )r   r   r)   r)   r*   r@   /  s    

zProcess.create_timec             C   s   | j  td  S )NrA   )r   r   )r   r)   r)   r*   rA   ;  s    zProcess.num_threadsc             C   s@   t j| j}g }x*|D ]"\}}}tj|||}|j| qW |S )N)rl   Zproc_threadsr   r   Zpthreadr   )r   r   r   Z	thread_idutimeZstimentupler)   r)   r*   threads?  s    zProcess.threadsc             C   sv   yt j| j\}}W nP tk
rd } z4|jtkrR| j }|td  }|td  }n W Y d d }~X nX tj	||ddS )Nr>   r?   g        )
rl   Zproc_cpu_timesr   r   r   r   r   r   r   Z	pcputimes)r   rS   rT   r   r   r)   r)   r*   r   H  s    
zProcess.cpu_timesc             C   s   t j| jS )N)rl   Zproc_suspendr   )r   r)   r)   r*   suspendV  s    zProcess.suspendc             C   s   t j| jS )N)rl   Zproc_resumer   )r   r)   r)   r*   resumeZ  s    zProcess.resumec             C   s4   | j dkrt| j | jtj| j }ttjj|S )Nr   r   )r   r   )	r   r   r   rl   Zproc_cwdru   rm   rc   normpath)r   rc   r)   r)   r*   cwd^  s    
zProcess.cwdc             C   sh   | j dkrg S t }tj| j }x>|D ]6}t|}t|r&tsFt|}tj	|d}|j
| q&W t|S )Nr   r   r   )r   r   r   )r   r   rl   Zproc_open_filesrp   r
   r   ru   r   Z	popenfiler   r   )r   r   Zraw_file_namesZ_filer   r)   r)   r*   
open_filesg  s    

zProcess.open_filesinetc             C   s   t || jdS )N)r   )r   r   )r   r   r)   r)   r*   connectionsz  s    zProcess.connectionsc             C   s    t j| j}td k	rt|}|S )N)rl   Zproc_priority_getr   enumr%   )r   valuer)   r)   r*   nice_get~  s    zProcess.nice_getc             C   s   t j| j|S )N)rl   Zproc_priority_setr   )r   r  r)   r)   r*   nice_set  s    zProcess.nice_setproc_io_priority_getc             C   s   t j| jS )N)rl   r	  r   )r   r)   r)   r*   
ionice_get  s    zProcess.ionice_getc             C   s.   |rt d|dkr td| tj| j|S )Nz<set_proc_ionice() on Windows takes only 1 argument (2 given)r+   r   r   z9value must be 2 (normal), 1 (low) or 0 (very low); got %r)r+   r   r   )	TypeErrorr   rl   Zproc_io_priority_setr   )r   r  _r)   r)   r*   
ionice_set  s    zProcess.ionice_setc             C   s   yt j| j}W nx tk
r } z\|jtkrv| j }|td  |td  |td  |td  |td  |td  f}n W Y d d }~X nX t| S )NrB   rC   rD   rE   rF   rG   )	rl   Zproc_io_countersr   r   r   r   r   r   rf   )r   r   r   r   r)   r)   r*   io_counters  s    





zProcess.io_countersc             C   s    t j| j}|rtjS tjS d S )N)rl   Zproc_is_suspendedr   r   ZSTATUS_STOPPEDZSTATUS_RUNNING)r   Z	suspendedr)   r)   r*   r     s    zProcess.statusc             C   s   dd }t j| j}||S )Nc                s    fddt dD S )Nc                s   g | ]}d |>  @ r|qS )r   r)   )r   i)r   r)   r*   r     s    zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>@   )r   )r   r)   )r   r*   from_bitmask  s    z.Process.cpu_affinity_get.<locals>.from_bitmask)rl   Zproc_cpu_affinity_getr   )r   r  bitmaskr)   r)   r*   cpu_affinity_get  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
| j| d S )Nc             S   s2   | st d|  d}x| D ]}|d| O }qW |S )Nzinvalid argument %rr   r+   )r   )loutbr)   r)   r*   
to_bitmask  s    
z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)r   rangern   r   rr   r   r   r  r   rl   Zproc_cpu_affinity_setr   )r   r  r  ZallcpusZcpur  r)   r)   r*   cpu_affinity_set  s    
zProcess.cpu_affinity_setc             C   sP   yt j| jS  tk
rJ } z"|jtkr8| j td  S  W Y d d }~X nX d S )Nr<   )rl   Zproc_num_handlesr   r   r   r   r   r   )r   r   r)   r)   r*   r<     s    
zProcess.num_handlesc             C   s   | j  td  }tj|dS )Nr=   r   )r   r   r   Zpctxsw)r   r=   r)   r)   r*   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@   rA   r   r   r   r   r  r  r  r  r  r   rl   r
  r  r  r   r  r  r<   r  r)   r)   r)   r*   r     sR   
	
		
	r   )r   r   r   r   )ra   r   )r   )r   r   r   r   rm   syscollectionsr    r   r   rl   ImportErrorr   rs   lower
startswithZgetwindowsversionr   RuntimeErrorr   r   r	   r
   r   r   r   r   r   Z_compatr   r   r   r   r   _exceptionsr   r   r   r   r   r   r   r   r   version_infor  Z__extra__all__r"   r   	frozensetZEPERMZEACCESZERROR_ACCESS_DENIEDr   ZERROR_INVALID_NAMEZERROR_SERVICE_DOES_NOT_EXISTr   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   rR   rX   r]   _fieldsr`   rb   rj   rd   rf   rp   ru   ry   rz   Zdisk_io_countersr~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   objectr   Zpidsr   r   r   r   r)   r)   r)   r*   <module>   s   








	
 *