oirdZddlZddlZddlZddlZddlZddlZddlZddlZddl m Z ddl m Z ddl m Z ddl mZddl mZdd l mZdd l mZdd l mZdd l mZdd l mZddl mZddl mZddl mZddl mZddlmZddlmZddlmZddlmZddlmZddlmZ ddl mZ no#e!$rgZ"e#e"$%dr1ej&ddkrdZ'e'dz Z'e'dz Z'e(e'e"dZ"["wwxYwgdZ)dZ*d Z+d!ej,vZ-ej.d"d#d$iZ/e/j0Z0e j1e j2e j3e j4e j5e j6e j7e j8e j9e j:e j;e j<e j=e j>e j?e j@e jAe jBe jCe jDe jEe jFe jGe*e jHe jIi ZJGd%d&ej.ZKeLMeKjNGd'd(ej.ZOeLMeOjNePdtid)dd*dd+d,d-d.d/d0d1d2d3dd4d5d6d7d8d9d:d;dd?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQZQejRdRSdTZSedUZTdVZUdWZVe jWZWe jXZXe jYZYdXZZdYZ[dZZ\d[Z]d\Z^d]Z_d^Z`d_Zad`abejcZddaZedbZfdudcZgddZhdeZidfZjdgZkdaldhZmdiZndjZodkZpGdldmZqe jrZre jsZse jtZtdnZudvdoZvdpZwdqZxGdrdsZydS)wz Windows platform implementation.N)_common)_ntuples)ENCODING) AccessDenied) NoSuchProcess)TimeoutExpired) conn_tmap)conn_to_ntuple)debug) isfile_strict)memoize)memoize_when_activated)parse_environ_block) usage_percent)ABOVE_NORMAL_PRIORITY_CLASS)BELOW_NORMAL_PRIORITY_CLASS)HIGH_PRIORITY_CLASS)IDLE_PRIORITY_CLASS)NORMAL_PRIORITY_CLASS)REALTIME_PRIORITY_CLASS)_psutil_windowszdll load failedz3this Windows version is too old (< Windows Vista); z:psutil 3.4.2 is the latest version which supports Windows z2000, XP and 2003 server)win_service_iterwin_service_getrrrrrrIOPRIO_VERYLOW IOPRIO_LOW IOPRIO_NORMAL IOPRIO_HIGHCONN_DELETE_TCBAF_LINK DELETE_TCBi+__pypy__ AddressFamilyr!c&eZdZeZeZeZeZeZeZdS)PriorityN) __name__ __module__ __qualname__rrrrrrAC:\PYTHON\Scheduler\python\Lib\site-packages\psutil/_pswindows.pyr'r'es4"="=--15r,r'ceZdZdZdZdZdZdS) IOPriorityrrN)r(r)r*rrrrr+r,r-r/r/qs"NJMKKKr,r/ num_handles ctx_switches user_timer0 kernel_timer1 create_time num_threads io_rcount io_wcount io_rbytes io_wbytes io_count_others io_bytes_others num_page_faults peak_wset wsetpeak_paged_pool paged_poolpeak_non_paged_poolnon_paged_poolpagefile peak_pagefile mem_privatei)maxsizecX|dr|Sd|ddd}|dvrdd|ddd}dd|dddz}nE|dr|dd}ntj|}|t |d}t j||S) zConvert paths using native DOS format like: "\Device\HarddiskVolume1\Windows\systemew\file.txt" or "\??\C:\Windows\systemew\file.txt" into: "C:\Windows\systemew\file.txt". z\\\Nr1>\??\UNC \Device\Mupr9z\??\r0) startswithjoinsplitcextQueryDosDevicelenospath)srawdrive driveletter remainders r-convert_dos_pathrjs ||Fyyrr*++H11199QWWT]]2A2.//tyyqs);<<<   X & &4ggdmmA& )(33 #h--//"I 7<< Y / //r,c(tjSN)ra getpagesizer+r,r-rmrms    r,ctj}|\}}}}|}|}|}||z }t||z |d} tj||| ||S)z&System virtual memory as a namedtuple.rround_)ra virtual_memrntpsvmem) memtotphys availphys_totsys _availsystotalavailfreeusedpercents r-virtual_memoryr~sf    C-0*GY E E D 5=DUU]U1===G 9UE7D$ 7 77r,ctj}|d}|d}||z }|dkr)tj}td|z|z}nd}d}||z }t |d}t j||||ddS)z=Swap system memory as a (total, used, free, sin, sout) tuple.rr0g{Gz?r)rarq swap_percentintroundrrsswap)rt total_phys total_systemry percentswapr|r{r}s r- swap_memoryrs    CQJq6L : %E  qyy')) 4+%-..  4%tW 5 55r,cBtj|}d|DS)zReturn disk partitions.c*g|]}tj|Sr+)rr sdiskpart).0xs r- z#disk_partitions..s / / /!CM1  / / /r,)radisk_partitions)allrawlists r-rrs&"3''G / /w / / //r,ctj\}}}tjdt tjD}tj||||j|jS)z)Return system CPU times as a named tuple.c,g|]}t|Sr+)sum)rns r-rzcpu_times.. s 5 5 5Q#a&& 5 5 5r,)ra cpu_timesrr scputimeszip per_cpu_times interruptdpc)usersystemidle percpu_summeds r-rrsj))D&$M 5 5#t1334 5 5 5M = fdM3]5F  r,cg}tjD]5\}}}}}tj|||||}||6|S)z6Return system per-CPU times as a list of named tuples.)rarrrrappend)retrrrrritems r-rrs[ C.2.@.B.B*fdIs}T64C@@ 4 Jr,c(tjS)z0Return the number of logical CPUs in the system.)racpu_count_logicalr+r,r-rrs  ! # ##r,c(tjS)z-Return the number of CPU cores in the system.)racpu_count_coresr+r,r-rrs   ! !!r,cdtj\}}}}d}tj||||S)zReturn CPU statistics.r)ra cpu_statsrr scpustats)r3 interrupts_dpcssyscallssoft_interruptss r-rr#s3040@0@-L*eXO =z?H M MMr,ctj\}}d}tjt ||t |gS)zMReturn CPU frequency. On Windows per-cpu frequency is not supported. r)racpu_freqrrscpufreqfloat)currmax_min_s r-rr*s;JD$ D LtdE$KK 8 8 99r,FcZtj}td|DS)Nc36K|]}t|dVdS)r0N)r)rloads r- z#_getloadavg_impl..:s*66DtQ666666r,)ra getloadavgtuple) raw_loadss r-_getloadavg_implr7s,!!I 66I666 6 66r,ctrtSt5tstjdadddn #1swxYwYtS)zReturn the number of processes in the system run queue averaged over the last 1, 5, and 15 minutes respectively as a tuple. TN)_loadavg_initializedr_lockrainit_loadavg_counterr+r,r-rr=s "!!! ((# (  % ' ' '#' (((((((((((((((   sAA  A c t|\}}tj|||}t}|D]E}|\}}} } } } } t ||| | | | t |dkr| nd}||Ft|S)zReturn socket connections. If pid == -1 return system-wide connections (as opposed to connections opened by one process only). r%N)pid)r ranet_connectionssetr TCP_STATUSESaddlist)kind_pidfamiliestypesrrrfdfamtypeladdrraddrstatusrnts r-rrSs oOHe"4599G %%C  370CueVS        rzzt      99r,ci}tj}|D]P\}}|\}}}}ttdrt j|}t j||||d||<Q|S)z)Get NIC stats (isup, duplex, speed, mtu). NicDuplex)ra net_if_statsitemshasattrrrrr snicstats)rrawdictnamerisupduplexspeedmtus r-rrjs C!!G}}@@ e#( feS 7K ( ( /&v..FM$sB??D Jr,c(tjS)zsReturn network I/O statistics for every network interface installed on the system as a dict of raw tuples. )ranet_io_countersr+r,r-rrvs   ! !!r,c(tjS)z,Return the addresses associated to each NIC.)ra net_if_addrsr+r,r-rr}s    r,ctj\}}}}|dk}t|dz}t|dz}|rdS|s|r tj}n|dkr tj}t j|||S)zReturn battery information.rr>Nr%)rasensors_batteryboolrPOWER_TIME_UNLIMITEDPOWER_TIME_UNKNOWNrrsbattery) acline_statusflagsr}secsleft power_plugged no_batterychargings r-rrs /3.B.D.D+M5'8!Q&Meck""JEAIHt../ R- <= 9 99r,ctjtjz }t|tz dkrtS|a|S)zThe system boot time expressed in seconds since the epoch. This also includes the time spent during hybernate / suspend. r)timerauptimeabs _last_btime)rs r- boot_timersB )++ %C 3 ""  r,cg}tj}|D]5}|\}}}tj|d||d}||6|S)z:Return currently connected users as a list of namedtuples.N)rausersrrsuserr)retlistrrrhostnametstamprs r-rrs^GjllG!%h YtT8VT : :r Nr,c#`KtjD]\}}t||VdS)z*Yields a list of WindowsService instances.N)rawinservice_enumerateWindowsService)r display_names r-rrsF"79911lT<00000011r,cdt|d}|d|_|S)zBOpen a Windows service and return it as a WindowsService instance.Nr )r _query_config _display_name)rservices r-rrs/T4((G#1133NCG Nr,ceZdZdZdZdZdZdZdZdZ dZ e j d Z d Zd Zd Zd ZdZdZdZdZdZdS)rz(Represents an installed Windows service.c"||_||_dSrl)_namer )selfrr s r-__init__zWindowsService.__init__s )r,cHd|jd|jd}|jj|S)Nz(name=z, display_name=))rr  __class__r()rdetailss r-__str__zWindowsService.__str__s5O4:OO8JOOO.)47444r,cRd|dt|dS)N)ridrs r-__repr__zWindowsService.__repr__s)24<<>>22r$xx2222r,cZt|tstS|j|jkSrl)rrNotImplementedrrothers r-__eq__zWindowsService.__eq__s+%00 "! !zU[((r,c||k Srlr+r s r-__ne__zWindowsService.__ne__s5=  r,c|5tj|j\}}}}dddn #1swxYwYt ||||S)N)r binpathusername start_type)_wrap_exceptionsrawinservice_query_configrdict)rr r&r'r(s r-r zWindowsService._query_configs  " " $ $  ,TZ88 8L'8Z                %!     sAAAc|5tj|j\}}dddn #1swxYwY|dkrd}t ||S)Nr)rr)r)rawinservice_query_statusrr+)rrrs r- _query_statuszWindowsService._query_statuss  " " $ $ C C6tzBBKFC C C C C C C C C C C C C C C C !88C6s++++s>AAc#K dVdS#t$rm}|j}t|rd|d}td||||jt jt jhvrd|d}td|||d}~wwxYw)z{Ctx manager which translates bare OSError and WindowsError exceptions into NoSuchProcess and AccessDenied. Nzservice z( is not querable (not enough privileges)rrmsgz does not exist) OSErrorris_permission_errrwinerrorraERROR_INVALID_NAMEERROR_SERVICE_DOES_NOT_EXISTr)rerrrr1s r-r)zWindowsService._wrap_exceptionss   EEEEE   :D %% OtOOO#t$C@@@cI'1"9888#4SAAAsJ s BA(A<<Bc|jS)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. )rrs r-rzWindowsService.names zr,c|jS)z_The service display name. The value is cached when this class is instantiated. )r rs r-r zWindowsService.display_names !!r,c6|dS)zwThe fully qualified path to the service binary/exe file as a string, including command line arguments. r&r rs r-r&zWindowsService.binpath"s!!##I..r,c6|dS)z,The name of the user that owns this service.r'r;rs r-r'zWindowsService.username(s!!##J//r,c6|dS)zRA string which can either be "automatic", "manual" or "disabled". r(r;rs r-r(zWindowsService.start_type,s!!##L11r,c6|dS)zzThe process PID, if any, else None. This can be passed to Process class to control the service's process. rr.rs r-rzWindowsService.pid4s!!##E**r,c6|dS)zService status as a string.rr?rs r-rzWindowsService.status:s!!##H--r,cNtj|S)zService long description.)rawinservice_query_descrrrs r- descriptionzWindowsService.description>s*499;;777r,c|}||||d<||d<||d<|S)zUUtility method retrieving all the information above as a dictionary. rr rC)r updater.rr rC)rds r-as_dictzWindowsService.as_dictDsu     ##%%&&&IIKK&  --//.++---r,N)r(r)r*__doc__rrrr"r$r r. contextlibcontextmanagerr)rr r&r'r(rrrCrGr+r,r-rrs)22***555333)))!!!    ,,,0""" /// 000222+++ ...888     r,rct|ts J|t|tp|jtjtjhvS)z*Return True if this is a permission error.)rr2PermissionErrorr4raERROR_ACCESS_DENIEDERROR_PRIVILEGE_NOT_HELD)excs r-r3r3sR c7 # #((S(( # c? + + s|   %@0r,ct|ts J|t|rt||St|trt ||S|)z3Convert OSError into NoSuchProcess or AccessDenied.rr)rr2r3rProcessLookupErrorr)rOrrs r-convert_oserrorrSsn c7 # #((S(( #0$////#)**140000 Ir,cFtjfd}|S)zDDecorator which converts OSError into NoSuchProcess or AccessDenied.c| |g|Ri|S#t$r"}t||j|j|d}~wwxYw)NrQ)r2rSrr)rargskwargsr7funs r-wrapperz wrap_exceptions..wrappersg O3t-d---f-- - O O O!#48$*EEE3 N Os  ;6; functoolswrapsrXrYs` r-wrap_exceptionsr^s?_SOOOOO Nr,cFtjfd}|S)zWorkaround for https://github.com/giampaolo/psutil/issues/875. See: https://stackoverflow.com/questions/4457745#4457745. c:d}d}t|D]a} |g|Ri|cS#t$rD}|}|jtkr,t j|t |dzd}Yd}~Yd}~wwxYwd|d|}t|j|j |)N-C6?!r0{Gz?z retried z: times, converted to AccessDenied as it's still returning r0) ranger2r4ERROR_PARTIAL_COPYrsleepminrrr) rrVrWdelaytimes_r7r1rXs r-rYz)retry_error_partial_copy..wrappersu  A s41$111&11111   <#555Ju%%% 400EHHHH   % %U % %" % % txdjcBBBBs & A49A/.A//A4rZr]s` r-retry_error_partial_copyrks? _SCCCCC& Nr,ceZdZdZgdZdZdZdZedZ dZ e edZ e e d Ze e d Zd Zd Ze d Ze dZdZe dZe dZe d*dZe dZe d+dZe dZe dZe dZe dZe dZe e dZe dZ e d,dZ!e d Z"e d!Z#e d"Z$e d#Z%e d$Z&e d%Z'e d&Z(e d'Z)e d(Z*e d)Z+dS)-Processz1Wrapper class around underlying C implementation.)_cacher_ppidrc0||_d|_d|_dSrl)rrro)rrs r-rzProcess.__init__s  r,cn|j||j|dSrl) _proc_infocache_activateexers r- oneshot_enterzProcess.oneshot_enters4 &&t,,, %%%%%r,cn|j||j|dSrl)rrcache_deactivatertrs r- oneshot_exitzProcess.oneshot_exits4 ((... !!$'''''r,ctj|j}t|ttksJ|S)zOReturn multiple information about this process as a raw tuple. )ra proc_inforrc pinfo_maprrs r-rrzProcess._proc_infos7 nTX&&3xx3y>>)))) r,c|jdkrdS|jdkrdStj|S)zbReturn process name, which on Windows is always the final part of the executable. rzSystem Idle Processr7System)rrdrebasenamertrs r-rz Process.namesC 8q==(( 8q==8w +++r,cZtrf tj|j}nd#t$r>}|jdkr-t |dt|j|j|d}~wwxYwtj|j}| drt|S|S)Nz translated into AccessDeniedr[) PYPYraproc_exerr2errnor rrr^rj)rrtr7s r-rtz Process.exes  * mDH--   9??SAAABBB&tx<<#E  -))C >>$   )#C(( ( s# A+9A&&A+c(tjtjkr^ tj|jdS#t $r5}t |r tj|jdcYd}~Sd}~wwxYwtj|jdS)NT)use_pebF)raWINVER WINDOWS_8_1 proc_cmdlinerr2r3rr7s r-cmdlinezProcess.cmdlines ;$* * * (4@@@@   $S)),TXuEEEEEEEEE   $TXt<<< >II" I I I $(DJ??S H$   III  )dh'' !   M5577g--$W$(LLLL Ju    4((E  )sA//B1>BB10B1c^|jdvrdStj|j\}}|d|S)Nrr7zNT AUTHORITY\SYSTEMr[)rra proc_username)rdomainrs r-r'zProcess.usernames? 8v  )))$(33 ""D"""r,Fc tj|j\}}}|S#t$rQ}t |r<|rt d|tdcYd}~Sd}~wwxYw)Nz*attempting create_time() fallback (slower)r6)ra proc_timesrr2r3r rrr{)r fast_only_user_systemcreatedr7s r-r6zProcess.create_times &*odh&?&? #E7GN    %% CBCCC((=)ABBBBBBB   s!! A<AA70A<6A77A<cL|tdS)Nr8)rrr{rs r-r8zProcess.num_threadss  =!9::r,ctj|j}g}|D]1\}}}tj|||}||2|Srl)ra proc_threadsrrrpthreadr)rrr thread_idutimestimentuples r-threadszProcess.threadss\#DH--'. # # #Iue[E599F NN6 " " " "r,cN tj|j\}}}np#t$rc}t |st d|}|td}|td}Yd}~nd}~wwxYwtj ||ddS)Nz(attempting cpu_times() fallback (slower)r4r5r) rarrr2r3r rrr{rr pcputimes)rrr_createdr7rs r-rzProcess.cpu_timess 4%)_TX%>%> "D&(( 4 4 4$S))  < = = =??$$D +./D)M23FFFFFF  4}T63444s B ABB c:tj|jddS)NTraproc_suspend_or_resumerrs r-suspendzProcess.suspends #DHd33333r,c:tj|jddS)NFrrs r-resumezProcess.resumes #DHe44444r,c|jdvrt|j|jtj|j}t j|S)Nr)rrrraproc_cwdrdrenormpath)rres r-cwdz Process.cwdsN 8v  tx44 4}TX&&w%%%r,c|jdvrgSt}tj|j}|D]J}t |}t |r*t j|d}||Kt|S)Nrr%) rrraproc_open_filesrjr rr popenfilerr)rrraw_file_namesfilers r- open_fileszProcess.open_filess 8v  Iee -dh77"  D#D))DT"" tR00Cyyr,inetc.t||jS)N)r)rr)rrs r-rzProcess.net_connectionsst$(3333r,cVtj|j}t|}|Srl)raproc_priority_getrr'rvalues r-nice_getzProcess.nice_gets$&tx00 r,c6tj|j|Srl)raproc_priority_setrrs r-nice_setzProcess.nice_sets%dh666r,cVtj|j}t|}|Srl)raproc_io_priority_getrr/r|s r- ionice_getzProcess.ionice_gets$'11oo r,c|rd}t||tjtjtjtjhvr|d}t |tj|j |dS)Nz&value argument not accepted on Windowsz is not a valid priority) TypeErrorr/rrrrrraproc_io_priority_setr)rioclassrr1s r- ionice_setzProcess.ionice_sets|  !:CC..   %  !  $  "    666CS// ! !$(G44444r,c  tj|j}n#t$r}t |st d|}|td|td|td|td|td|tdf}Yd}~nd}~wwxYwtj |S)Nz*attempting io_counters() fallback (slower)r:r;r=r?rArC) raproc_io_countersrr2r3r rrr{rrpio)rrr7rs r- io_counterszProcess.io_counterss '11CC   $S))  > ? ? ???$$DY{+,Y{+,Y{+,Y{+,Y012Y012 CCCCCC w}s CB!C  Cchtj|j}|r tjStjSrl)raproc_is_suspendedrrSTATUS_STOPPEDSTATUS_RUNNING)r suspendeds r-rzProcess.statuss.*4844  *) )) )r,cPd}tj|j}||S)Nc:fdtdDS)Nc$g|] }d|zz | S)rr+)rirs r-rzBProcess.cpu_affinity_get..from_bitmask..s&999!Q!VqL9A999r,@)rd)rs`r- from_bitmaskz.Process.cpu_affinity_get..from_bitmasks#9999uRyy999 9r,)raproc_cpu_affinity_getr)rrbitmasks r-cpu_affinity_getzProcess.cpu_affinity_gets5 : : :,TX66|G$$$r,cNd}tttt}|D]D}||vr>t |t sd|d}t |d|}t|E||}tj |j |dS)NcP|sd|}t|d}|D] }|d|zz} |S)Nzinvalid argument rr0)r)lsr1outbs r- to_bitmaskz,Process.cpu_affinity_set..to_bitmask"sK &0"00 oo%C  q!t Jr,z invalid CPU z; an integer is required) rrdrcrrrrrraproc_cpu_affinity_setr)rrrallcpuscpur1r s r-cpu_affinity_setzProcess.cpu_affinity_set s   uS112233 & &C'!!!#s++)HHHHC#C..(,S,, oo% "*U## "48W55555r,c tj|jS#t$rN}t |r9t d|tdcYd}~Sd}~wwxYw)Nz*attempting num_handles() fallback (slower)r2)raproc_num_handlesrr2r3r rrr{rs r-r2zProcess.num_handles:s (22 2    %% CBCCC((=)ABBBBBBB   s! A3AA.'A3-A..A3cv|td}tj|dS)Nr3r)rrr{rrpctxsw)rr3s r-num_ctx_switcheszProcess.num_ctx_switchesDs-((>)BC z,***r,rl)F)r),r(r)r*rH __slots__rrurxrrrrr^rtrkrrrrrrrrrrr'r6r8rrrrrrrrrrrrrr rr2rr+r,r-rmrms;;333I&&&((( , , ,_" = =_ =&&_&@@@ .))_)11_1 . . .((_( " "_ "()()()_()T##_#    _ ;;_;_ 5 5_ 544_455_5&&_&_ 444_4_ 77_7_  5 5_ 5_$**_*%%_%66_62_++_+++r,rmr+)r%)NN)zrHrIenumr[rdrsys threadingrrrrrrrrrr r r r r rrrrrrrrrrrra ImportErrorr7strlowerr^getwindowsversionr1 RuntimeError__extra__all__r rebuiltin_module_namesrIntEnumr$r!MIB_TCP_STATE_ESTABCONN_ESTABLISHEDMIB_TCP_STATE_SYN_SENT CONN_SYN_SENTMIB_TCP_STATE_SYN_RCVD CONN_SYN_RECVMIB_TCP_STATE_FIN_WAIT1CONN_FIN_WAIT1MIB_TCP_STATE_FIN_WAIT2CONN_FIN_WAIT2MIB_TCP_STATE_TIME_WAITCONN_TIME_WAITMIB_TCP_STATE_CLOSED CONN_CLOSEMIB_TCP_STATE_CLOSE_WAITCONN_CLOSE_WAITMIB_TCP_STATE_LAST_ACK CONN_LAST_ACKMIB_TCP_STATE_LISTEN CONN_LISTENMIB_TCP_STATE_CLOSING CONN_CLOSINGMIB_TCP_STATE_DELETE_TCBPSUTIL_CONN_NONE CONN_NONErr'globalsrE __members__r/r+r{ lru_cacherjrmr~r heap_info heap_trimdisk_io_countersrrrrrrrrrLockrrrrrrrrrrrrrrpidsrrr3rSr^rkrmr+r,r-rHs '&   !!!!!!""""""############""""""++++++((((((""""""888888888888000000000000222222444444))))))) C##$566  !C ! # #A & * * D KK ))l3S( (   $S-- _y"o>>   g6!6!6 '"8 '"8 '"8w1!7#:!6w2 4!?7, "66666t|666 %&&& '((( D     a         a a a a B B B b    B! "r# $% &2' (R) *"+ ,-  >S!!!00"!0*   8 8 87776 N N (666000   $$$ """ NNN::: 777 ,.   """:::2      111 }}}}}}}}X y _ =   8K+K+K+K+K+K+K+K+K+K+sB##D(A"D  D