o
    iB                     @   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% zddl
mZ& W n, e'y Z( z e)e(* +dre, d d k rd!Z-e-d"7 Z-e-d#7 Z-e.e- dZ([(ww ej/d$krddl0Z0ndZ0g d%Z1d&Z2d'Z3d(ej4v Z5e0du rd)Z6ne07d*d+d)i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ureG d,d- d-e0j7ZSeT UeSjV e0du rsdZWdZXd.ZYd/ZZnG d0d1 d1e0j7Z[eT Ue[jV e\di d2dd3dd4d.d5d/d6d7d8d9d:d d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXZ]e	dYg dZZ^e	d[g d\Z_e	d]g d^Z`e	d_e`jad` Zbe	dadbdcgZce	dddedfdecja Zee	dgg dhZfedidjdkdl Zgdmdn Zhedodp Zidqdr Zjdsdt Zke&jlZldudv Zmdwdx Zndydz Zod{d| Zpd}d~ Zqdd 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_LINK
DELETE_TCBi+  __pypy__AddressFamilyr)   c                   @   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    r2   r2   L/var/www/edux/Edux_v2/venv/lib/python3.10/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   r4   r    N)r/   r0   r1   r$   r%   r&   r'   r2   r2   r2   r3   r5   ~   s
    r5   num_handlesctx_switches	user_timekernel_timecreate_timer!   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vmsrH   rJ   rL   rN   rP   peak_nonpaged_poolnonpaged_poolrV   rX   privatepfullmem)usspmmap_groupedpathri   	pmmap_extzaddr perms  pio)
read_countwrite_count
read_byteswrite_bytesother_count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cextQueryDosDevicelenosrq   )srawdrivedriveletter	remainderr2   r2   r3   convert_dos_path   s   
r   c                 C   s"   t r| S t| tr| S | ttS )zmEncode a unicode string to a byte string by using the default fs
    encoding + "replace" error handler.
    )r   
isinstancestrencoder   r   )r   r2   r2   r3   py2_strencode   s
   
r   c                   C      t  S N)r   getpagesizer2   r2   r2   r3   r         r   c            
      C   sJ   t  } | \}}}}|}|}|}|| }t|| |dd}	t|||	||S )z&System virtual memory as a namedtuple.r   round_)r   virtual_memr   rb   )
memtotphys	availphystotsysavailsysrc   availrg   rf   re   r2   r2   r3   virtual_memory   s   r   c                  C   sp   t  } | d }| d }|| }|dkr!t  }td| | }nd}|| }t||dd}t||||ddS )z=Swap system memory as a (total, used, free, sin, sout) tuple.r   r4   g{Gz?r   r   )r   r   getpercentswapintr   r   sswap)r   
total_phystotal_systemrc   percentswaprf   rg   re   r2   r2   r3   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   r   
disk_usager   r   
sdiskusage)rq   rc   rg   rf   re   r2   r2   r3   r     s   r   c                 C   s   t | }dd |D S )zReturn disk partitions.c                 S   s   g | ]}t j| qS r2   )r   	sdiskpart.0xr2   r2   r3   
<listcomp>!      z#disk_partitions.<locals>.<listcomp>)r   disk_partitions)allrawlistr2   r2   r3   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      g | ]}t |qS r2   )sum)r   nr2   r2   r3   r   /      zcpu_times.<locals>.<listcomp>)r   	cpu_timesr\   zipper_cpu_timesr`   ra   )r]   r^   r_   percpu_summedr2   r2   r3   r   )  s
   r   c                  C   s:   g } t  D ]\}}}}}t|||||}| | q| S )z6Return system per-CPU times as a list of named tuples.)r   r   r\   append)retr]   r^   r_   r`   ra   itemr2   r2   r3   r   4  s
   r   c                   C   r   )z0Return the number of logical CPUs in the system.)r   cpu_count_logicalr2   r2   r2   r3   r   =  r   r   c                   C   r   )z-Return the number of CPU cores in the system.)r   cpu_count_coresr2   r2   r2   r3   r   B  r   r   c                  C   s$   t  \} }}}d}t| |||S )zReturn CPU statistics.r   )r   	cpu_statsr   	scpustats)r7   
interruptsdpcssyscallssoft_interruptsr2   r2   r3   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.
            )r   cpu_freqr   scpufreqfloat)currmax_min_r2   r2   r3   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 )r4   )round)r   loadr2   r2   r3   r   f  r   zgetloadavg.<locals>.<listcomp>)_loadavg_inititializedr   init_loadavg_counter
getloadavgtuple)	raw_loadsr2   r2   r3   r   [  s
   r   c                 C   s   | t vrtd| ddd t D f t |  \}}t|||}t }|D ]"}|\}}}	}
}}}t|||	|
||t|dkr?|ndd}|| q&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   r   r2   )reprr   r2   r2   r3   r   t  r   z#net_connections.<locals>.<listcomp>r,   N)pid)
r
   
ValueErrorr}   r   net_connectionssetr   TCP_STATUSESaddlist)kind_pidfamiliestypesr   r   r   fdfamtypeladdrraddrstatusr   ntr2   r2   r3   r   n  s   r   c                  C   sz   i } t  }| D ]0\}}tst|tsJ t|t|}|\}}}}tt	dr/t	
|}t	||||d| |< q
| S )z)Get NIC stats (isup, duplex, speed, mtu).	NicDuplex )r   net_if_statsitemsr   r   r   r   r   hasattrr   r   	snicstats)r   rawdictnamer   isupduplexspeedmtur2   r2   r3   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 r2   r   )r   kvr2   r2   r3   r         z#net_io_counters.<locals>.<listcomp>)r   net_io_countersdictr   r   r2   r2   r3   r     s   r   c                  C   s8   g } t  D ]}t|}t|d |d< | | q| S )z,Return the addresses associated to each NIC.r   )r   net_if_addrsr   r   r   )r   r   r2   r2   r3   r     s   r   c                  C   sd   t  \} }}}| dk}t|d@ }t|d@ }|rdS |s |r$tj}n|dkr+tj}t|||S )zReturn battery information.r      rA   Nr,   )r   sensors_batteryboolr   POWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNsbattery)acline_statusflagsre   secsleftpower_plugged
no_batterychargingr2   r2   r3   r     s   r   c                  C   s(   t t } t| t dkrtS | a| S )z:The system boot time expressed in seconds since the epoch.r   )r   r   	boot_timeabs_last_btimer   r2   r2   r3   r    s
   r  c                  C   sH   g } t  }|D ]}|\}}}t|}t|d||d}| | q| S )z:Return currently connected users as a list of namedtuples.N)r   usersr   r   suserr   )retlistr   r   r]   hostnametstampr   r2   r2   r3   r    s   
r  c                  c   s,    t  D ]\} }tt| t|V  qdS )z*Yields a list of WindowsService instances.N)r   winservice_enumerateWindowsServicer   )r   display_namer2   r2   r3   r"     s   r"   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   servicer2   r2   r3   r#     s   
r#   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 r   )_namer  )selfr   r  r2   r2   r3   __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  detailsr2   r2   r3   __str__  s   zWindowsService.__str__c                 C   s   d|   t| f S )Nz
<%s at %s>)r  idr  r2   r2   r3   __repr__  s   zWindowsService.__repr__c                 C   s   t |tstS | j|jkS r   )r   r  NotImplementedr  r  otherr2   r2   r3   __eq__  s   
zWindowsService.__eq__c                 C   s
   | |k S r   r2   r  r2   r2   r3   __ne__  s   
zWindowsService.__ne__c                 C   s\   |    t| j\}}}}W d    n1 sw   Y  tt|t|t|t|dS )N)r  binpathusername
start_type)_wrap_exceptionsr   winservice_query_configr  r   r   )r  r  r   r!  r"  r2   r2   r3   r    s   

zWindowsService._query_configc                 C   sP   |    t| j\}}W d    n1 sw   Y  |dkr"d }t||dS )Nr   )r   r   )r#  r   winservice_query_statusr  r   )r  r   r   r2   r2   r3   _query_status  s   
zWindowsService._query_statusc              
   c   sp    zdV  W dS  t y7 } z$t|rtd| jd| j d|jtjtjfv r2td| jd| j d d}~ww )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  winerrorr   ERROR_INVALID_NAMEERROR_SERVICE_DOES_NOT_EXISTr   r  errr2   r2   r3   r#    s*   zWindowsService._wrap_exceptionsc                 C      | 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  r2   r2   r3   r   0  s   zWindowsService.namec                 C   r0  )z_The service display name. The value is cached when this class
        is instantiated.
        )r  r  r2   r2   r3   r  7  s   zWindowsService.display_namec                 C      |   d S )zwThe fully qualified path to the service binary/exe file as
        a string, including command line arguments.
        r   r  r  r2   r2   r3   r   =     zWindowsService.binpathc                 C   r1  )z,The name of the user that owns this service.r!  r2  r  r2   r2   r3   r!  C     zWindowsService.usernamec                 C   r1  )zRA string which can either be "automatic", "manual" or
        "disabled".
        r"  r2  r  r2   r2   r3   r"  G  r3  zWindowsService.start_typec                 C   r1  )zzThe process PID, if any, else None. This can be passed
        to Process class to control the service's process.
        r   r&  r  r2   r2   r3   r   O  r3  zWindowsService.pidc                 C   r1  )zService status as a string.r   r5  r  r2   r2   r3   r   U  r4  zWindowsService.statusc                 C   s   t t|  S )zService long description.)r   r   winservice_query_descrr   r  r2   r2   r3   descriptionY     zWindowsService.descriptionc                 C   s>   |   }||   |  |d< |  |d< |  |d< |S )zUUtility method retrieving all the information above as a
        dictionary.
        r   r  r7  )r  updater&  r   r  r7  )r  dr2   r2   r3   as_dict_  s   zWindowsService.as_dictN)r/   r0   r1   __doc__r  r  r  r  r  r  r&  
contextlibcontextmanagerr#  r   r  r   r!  r"  r   r   r7  r;  r2   r2   r2   r3   r    s(    
r  c                 C   s<   t | ts	J | | jtjtjfv pt| ddtjtjfv S )z*Return True if this is a permission error.r+  r,   )	r   r)  errnoEPERMEACCESgetattrr   ERROR_ACCESS_DENIEDERROR_PRIVILEGE_NOT_HELD)excr2   r2   r3   r*    s   r*  c                 C   sB   t | ts	J | t| rt||dS | jtjkrt||dS | )z3Convert OSError into NoSuchProcess or AccessDenied.r   r   )r   r)  r*  r   r?  ESRCHr   )rE  r   r   r2   r2   r3   convert_oserror  s   rH  c                       t   fdd}|S )zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c              
      sD   z | g|R i |W S  t y! } z	t|| j| jdd }~ww )NrF  )r)  rH  r   r  )r  argskwargsr/  funr2   r3   wrapper  s   z wrap_exceptions.<locals>.wrapper	functoolswrapsrM  rN  r2   rL  r3   wrap_exceptions  s   rS  c                    rI  )zWorkaround for https://github.com/giampaolo/psutil/issues/875.
    See: https://stackoverflow.com/questions/4457745#4457745
    c           	         s   d}d}t |D ]6}z | g|R i |W   S  ty> } z|}|jtkr9t| t|d d}W Y d }~q d }~ww d ||f }t| j| j	|d)N-C6?!   r4   {Gz?zI%s retried %s times, converted to AccessDenied as it's still returning %rr'  )
r   WindowsErrorr+  ERROR_PARTIAL_COPYtimesleepminr   r   r  )	r  rJ  rK  delaytimesr   _r/  r(  rL  r2   r3   rN    s$   

	z)retry_error_partial_copy.<locals>.wrapperrO  rR  r2   rL  r3   retry_error_partial_copy  s   r_  c                   @   s  e Zd ZdZg d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dMd"d#Zed$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ed2d3 Zed4d5 Z edNd7d8Z!ed9d: Z"ed;d< Z#ed=d> Z$ed?d@ Z%edAdB Z&edCdD Z'edEdF Z(edGdH Z)edIdJ Z*edKdL Z+d!S )OProcessz1Wrapper class around underlying C implementation.)r   r  _ppid_cachec                 C   s   || _ d | _d | _d S r   )r   r  ra  )r  r   r2   r2   r3   r    s   
zProcess.__init__c                 C      | j |  | j|  d S r   )
_proc_infocache_activateexer  r2   r2   r3   oneshot_enter     zProcess.oneshot_enterc                 C   rc  r   )rd  cache_deactivaterf  r  r2   r2   r3   oneshot_exit  rh  zProcess.oneshot_exitc                 C   s$   t | j}t|ttksJ |S )zOReturn multiple information about this process as a
        raw tuple.
        )r   	proc_infor   r   	pinfo_mapr  r   r2   r2   r3   rd    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   r   rq   basenamerf  r  r2   r2   r3   r     s
   

zProcess.namec              
   C   s   t r*zt| j}W n% ty) } z|jdkr$td|  t| j| j d }~ww t| j}t	s6t
|}|dr?t|S |S )N   z%r translated into AccessDeniedr|   )PYPYr   proc_exer   rW  r?  r   r   r  r   r   
startswithr   )r  rf  r/  r2   r2   r3   rf    s    

zProcess.exec              
   C   s   t jt jkr1z
t j| jdd}W n( ty0 } zt|r%t j| jdd}n W Y d }~nd }~ww t j| jdd}tr=|S dd |D S )NT)use_pebFc                 S   r   r2   r   )r   r   r2   r2   r3   r   &  r   z#Process.cmdline.<locals>.<listcomp>)r   WINVERWINDOWS_8_1proc_cmdliner   r)  r*  r   )r  r   r/  r2   r2   r3   cmdline  s   zProcess.cmdlinec                 C   s6   t | j}|rtst|tsJ t|tt|S r   )	r   proc_environr   r   r   r   r   r   r   )r  ustrr2   r2   r3   environ(  s   zProcess.environc                 C   s,   zt  | j W S  ty   t| j| jw r   )ppid_mapr   KeyErrorr   r  r  r2   r2   r3   ppid0  s
   zProcess.ppidc                 C   s   zt | jW S  tyV } zCt|rQ|  }|td  |td  |td  |td  |td  |td  |td  |td  |td	  |td
  f
W  Y d }~S  d }~ww )NrH   rJ   rL   rN   rP   rR   rT   rV   rX   rZ   )r   proc_memory_infor   r)  r*  rd  rl  )r  r/  infor2   r2   r3   _get_raw_meminfo6  s&   









zProcess._get_raw_meminfoc                 C   s(   |   }|d }|d }t||f|  S )Nr4   r?   )r  rh   )r  tri   rj   r2   r2   r3   memory_infoL  s   zProcess.memory_infoc                 C   s,   |   }t| j}|t 9 }t||f  S r   )r  r   proc_memory_ussr   r   rn   )r  	basic_memro   r2   r2   r3   memory_full_infoV  s   
zProcess.memory_full_infoc              
   c   s|    zt | j}W n ty } zt|| j| jd }~ww |D ]\}}}}t|}ts0t|}t	|}||||fV  q d S r   )
r   proc_memory_mapsr   r)  rH  r  r   r   r   hex)r  rawr/  addrpermrq   ri   r2   r2   r3   memory_maps]  s   zProcess.memory_mapsc                 C   s   t | jS r   )r   	proc_killr   r  r2   r2   r3   killl  r4  zProcess.killc                 C   sT   |t jkrt| j d S |tt dt tt dt fv r&t| j| d S t	d)NCTRL_C_EVENTCTRL_BREAK_EVENTzPonly SIGTERM, CTRL_C_EVENT and CTRL_BREAK_EVENT signals are supported on Windows)
signalSIGTERMr   r  r   rB  objectr   r  r   )r  sigr2   r2   r3   send_signalp  s   
zProcess.send_signalNc                 C   s   |d u rt j}nt|d }ttdtj}|d ur| | nd }z	t | j|}W n t jy9   t|| j| j t j	yD   d }Y nw d}	 t
| jsO|S |r_| |kr_t|| j| jdt| t|d d}qH)Ni  	monotonicrT  TrF  r4   rV  )r   INFINITEr   rB  rY  	proc_waitr   r	   r  TimeoutAbandoned
pid_existsrZ  r[  )r  timeoutcext_timeouttimerstop_at	exit_coder\  r2   r2   r3   wait}  s*   	

zProcess.waitc                 C   s2   | j dv rdS t| j \}}t|d t| S )Nr   r!   zNT AUTHORITY\SYSTEMr|   )r   r   proc_usernamer   )r  domainr]   r2   r2   r3   r!    s   
zProcess.usernamec              
   C   sX   zt | j\}}}|W S  ty+ } zt|r&|  td  W  Y d }~S  d }~ww )Nr:   )r   
proc_timesr   r)  r*  rd  rl  )r  r]   r^   createdr/  r2   r2   r3   r:     s   zProcess.create_timec                 C   s   |   td  S )Nr;   )rd  rl  r  r2   r2   r3   r;     s   zProcess.num_threadsc                 C   s<   t | j}g }|D ]\}}}t|||}|| q
|S r   )r   proc_threadsr   r   pthreadr   )r  r   r	  	thread_idutimestimentupler2   r2   r3   threads  s   zProcess.threadsc              
   C   sv   zt | j\}}}W n' ty2 } zt|s |  }|td  }|td  }W Y d }~nd }~ww t||ddS )Nr8   r9   r   )	r   r  r   r)  r*  rd  rl  r   	pcputimes)r  r]   r^   r  r/  r  r2   r2   r3   r     s   zProcess.cpu_timesc                 C      t | jd d S )NTr   proc_suspend_or_resumer   r  r2   r2   r3   suspend  r8  zProcess.suspendc                 C   r  )NFr  r  r2   r2   r3   resume  r8  zProcess.resumec                 C   s4   | j dv rt| j | jt| j }ttj|S )Nr  )	r   r   r  r   proc_cwdr   r   rq   normpath)r  rq   r2   r2   r3   cwd  s   
zProcess.cwdc                 C   sd   | j dv rg S t }t| j }|D ]}t|}t|r-ts"t|}t	|d}|
| qt|S )Nr  r,   )r   r   r   proc_open_filesr   r   r   r   r   	popenfiler   r   )r  r   raw_file_names_filer  r2   r2   r3   
open_files  s   

zProcess.open_filesinetc                 C   s   t || jdS )N)r   )r   r   )r  r   r2   r2   r3   connections     zProcess.connectionsc                 C       t | j}td urt|}|S r   )r   proc_priority_getr   enumr.   r  valuer2   r2   r3   nice_get     zProcess.nice_getc                 C   s   t | j|S r   )r   proc_priority_setr   r  r2   r2   r3   nice_set  r  zProcess.nice_setc                 C   r  r   )r   proc_io_priority_getr   r  r5   rm  r2   r2   r3   
ionice_get	  r  zProcess.ionice_getc                 C   s:   |rt d|ttttfv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   r   proc_io_priority_setr   )r  ioclassr  r2   r2   r3   
ionice_set  s   zProcess.ionice_setc                 C   s   zt | j}W t| S  tyI } z2t|s |  }|td  |td  |td  |td  |td  |td  f}W Y d }~t| S d }~ww )Nr=   r>   r@   rB   rD   rF   )r   proc_io_countersr   r)  r*  rd  rl  rt   )r  r   r/  r  r2   r2   r3   io_counters  s"   





zProcess.io_countersc                 C   s   t | j}|rtjS tjS r   )r   proc_is_suspendedr   r   STATUS_STOPPEDSTATUS_RUNNING)r  	suspendedr2   r2   r3   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   r2   )r   ir   r2   r3   r   6  r   zBProcess.cpu_affinity_get.<locals>.from_bitmask.<locals>.<listcomp>@   r   r  r2   r  r3   from_bitmask5  s   z.Process.cpu_affinity_get.<locals>.from_bitmask)r   proc_cpu_affinity_getr   )r  r  bitmaskr2   r2   r3   cpu_affinity_get3  s   zProcess.cpu_affinity_getc                 C   sl   dd }t ttt }|D ]}||vr(t|ttfs"td| td| q||}t	
| j| d S )Nc                 S   s.   | st d|  d}| D ]}|d| O }q|S )Nzinvalid argument %rr   r4   )r   )lsoutbr2   r2   r3   
to_bitmask<  s   z,Process.cpu_affinity_set.<locals>.to_bitmaskz&invalid CPU %r; an integer is requiredzinvalid CPU %r)r   r   r   r   r   r   r   r  r   r   proc_cpu_affinity_setr   )r  r  r  allcpuscpur  r2   r2   r3   cpu_affinity_set:  s   zProcess.cpu_affinity_setc              
   C   sN   zt | jW S  ty& } zt|r!|  td  W  Y d }~S  d }~ww )Nr6   )r   proc_num_handlesr   r)  r*  rd  rl  r.  r2   r2   r3   r6   S  s   zProcess.num_handlesc                 C   s   |   td  }t|dS )Nr7   r   )rd  rl  r   pctxsw)r  r7   r2   r2   r3   num_ctx_switches\  s   zProcess.num_ctx_switchesr   )r  ),r/   r0   r1   r<  	__slots__r  rg  rj  r   rd  r   rS  rf  r_  rx  r{  r~  r  r  r  r  r  r  r  r!  r:   r;   r  r   r  r  r  r  r  r  r  r  r  r  r   r  r  r6   r  r2   r2   r2   r3   r`    s    

	


*
















r`  r2   )r,   )NN)r<  r=  r?  rP  r   r  sysrY  collectionsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   _compatr   r   r   r   r   r   r   r   r   r   r   r   r   ImportErrorr/  r   lowerrs  getwindowsversionr(  RuntimeErrorversion_infor  __extra__all__r(   rX  builtin_module_namesrq  r)   IntEnumr-   MIB_TCP_STATE_ESTABCONN_ESTABLISHEDMIB_TCP_STATE_SYN_SENTCONN_SYN_SENTMIB_TCP_STATE_SYN_RCVDCONN_SYN_RECVMIB_TCP_STATE_FIN_WAIT1CONN_FIN_WAIT1MIB_TCP_STATE_FIN_WAIT2CONN_FIN_WAIT2MIB_TCP_STATE_TIME_WAITCONN_TIME_WAITMIB_TCP_STATE_CLOSED
CONN_CLOSEMIB_TCP_STATE_CLOSE_WAITCONN_CLOSE_WAITMIB_TCP_STATE_LAST_ACKCONN_LAST_ACKMIB_TCP_STATE_LISTENCONN_LISTENMIB_TCP_STATE_CLOSINGCONN_CLOSINGMIB_TCP_STATE_DELETE_TCBPSUTIL_CONN_NONE	CONN_NONEr   r.   globalsr9  __members__r$   r%   r&   r'   r5   r   rl  r\   rb   rh   _fieldsrn   rp   r}   rr   rt   r   r   r   r   r   disk_io_countersr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r"   r#   r  r  pidsr  r|  r*  rH  rS  r_  r`  r2   r2   r2   r3   <module>   sb  





	
 


			
 *

