
    Rh                     H   d dl Z d dlZd dlZd dlZd dlZddlmZmZmZ ddl	m
Z
 ddl	mZ dgZdZej                  dk(  xr
  eed	d
      Zej"                  j%                         j'                  d      Zd Z eej"                  ej,                         Zd Z G d de      Zy)    N   )	reductionget_spawning_popenset_spawning_popen)spawn)utilPopeni   win32frozenFzpythonservice.exec                     | |k(  xs? t         j                  j                  |       t         j                  j                  |      k(  S N)ospathnormcase)p1p2s     8/usr/lib/python3.12/multiprocessing/popen_spawn_win32.py_path_eqr      s4    8Crww''+rww/?/?/CCC    c                  <    | D ]  }t        j                  |        y r   )_winapiCloseHandle)handleshandles     r   _close_handlesr      s     $F#$r   c                   >    e Zd ZdZdZd Zd Zd
dZd Zd Z	e	Z
d	 Zy)r	   z@
    Start a subprocess to run the code of a process object
    r   c                 d   t        j                  |j                        }t        j                  d d      \  }}t        j                  |d      }t        j                  t        j                         |      }t        j                         }t        rat        |t        j                        rGt        j                  x|d<   }t        j                   j#                         }t        j                  |d<   nd }dj%                  d |D              }t'        |dd      5 }		 t        j(                  ||d d d	d|d d 	      \  }
}}}t        j*                  |       || _        d | _        |
| _        t3        |
      | _        t7        j8                  | t:        | j4                  t3        |      f      | _        t?        |        	 tA        jB                  ||	       tA        jB                  ||	       t?        d        	 d d d        y #  t        j*                  |        xY w# t?        d        w xY w# 1 sw Y   y xY w)
Nr   )
parent_pidpipe_handle__PYVENV_LAUNCHER__ c              3   &   K   | ]	  }d |z    yw)z"%s"N ).0xs     r   	<genexpr>z!Popen.__init__.<locals>.<genexpr>F   s     /avz/s   wbT)closefdF)"r   get_preparation_data_namer   
CreatePipemsvcrtopen_osfhandleget_command_liner   getpidget_executableWINENVr   sys
executable_base_executableenvironcopyjoinopenCreateProcessr   pid
returncode_handleintsentinelr   Finalizer   	finalizerr   r   dump)selfprocess_obj	prep_datarhandlewhandlewfdcmd
python_exeenvto_childhphtr:   tids                 r   __init__zPopen.__init__-   s   ..{/@/@A	 #--dA6##GQ/$$		18: ))+
 hz3>>:"%"6"66CFZ**//#C),C%&Chh/3//#tT* 	)h#*#8#8$q#tT$; BS ##B' DH"DODLGDM!]]4,0MM3w<+HJDN t$)y(3{H5"4(3	) 	)##G,  #4(3	) 	)s=   H&7G;A%H&:,H&H&;HH&H##H&&H/c                 ^    | t               u sJ t        j                  || j                        S r   )r   r   	duplicater>   )rB   r   s     r   duplicate_for_childzPopen.duplicate_for_childc   s+    )++++""64==99r   Nc                    | j                   | j                   S |t        j                  }nt        dt	        |dz  dz               }t        j
                  t	        | j                        |      }|t        j                  k(  r@t        j                  | j                        }|t        k(  rt        j                   }|| _         | j                   S )Nr   i  g      ?)r;   r   INFINITEmaxr=   WaitForSingleObjectr<   WAIT_OBJECT_0GetExitCodeProcess	TERMINATEsignalSIGTERM)rB   timeoutmsecsrescodes        r   waitz
Popen.waitg   s    ??&??"?$$E3w~345E))#dll*;UC''''--dll;Dy "DOr   c                 &    | j                  d      S )Nr   )r\   )r`   rB   s    r   pollz
Popen.polly   s    yyy##r   c                    | j                   y 	 t        j                  t        | j                        t
               y # t        $ r? t        j                  t        | j                              }|t        j                  k(  r Y y w xY wr   )	r;   r   TerminateProcessr=   r<   rY   PermissionErrorrX   STILL_ACTIVE)rB   r_   s     r   	terminatezPopen.terminate|   sm    ??&	$$S%6	B 	 --c$,,.?@Dw+++ ,		s   -= ABBc                 $    | j                          y r   )r@   rb   s    r   closezPopen.close   s    r   r   )__name__
__module____qualname____doc__methodrO   rR   r`   rc   rh   killrj   r#   r   r   r	   r	   '   s4     F4)l:$$$ Dr   )r   r,   rZ   r2   r   contextr   r   r    r   r   __all__rY   platformgetattrWINEXEr3   lowerendswith
WINSERVICEr   r4   r1   r   objectr	   r#   r   r   <module>r{      s    	   
  F F  ) 	
,,'
!
Cgc8U&C^^!!#,,-@A
D cnnc&:&:;	;$jF jr   