grthtrhthjhtyjytjytkergtrhtrjytjerhrfh4:24 29/09/2026a ÿé!^ã@s°dZddlZddlZddlZddlZddlZddlZddlZzddlm Z m Z Wn"e yrddl m Z m Z Yn0ddl m Z mZddlmZddlmZGdd „d e ƒZdS) zJProvides an interface like pexpect.spawn interface using subprocess.Popen éN)ÚQueueÚEmptyé)Ú SpawnBaseÚPY3)ÚEOF)Ú string_typesc sleZdZd‡fdd„ ZdZdd „Zd d „Zd d „Zdd„Zdd„Z ddd„Z dd„Z dd„Z dd„Z ‡ZS)Ú PopenSpawnééÐNÚstrictc stt|ƒj|||||| d�|dur4tj d¡|_n| tj¡|_tdt j t j t j || |d�} t j dkr’t  ¡} | jt jO_| | d<t j| d<t|tƒrºt j dkrºtj|tjdkd �}t j|fi| ¤Ž|_|jj|_d |_| ¡|_tƒ|_tj|j d �|_!|j! "d ¡|j! #¡dS) N)ÚtimeoutÚmaxreadÚsearchwindowsizeÚlogfileÚencodingÚ codec_errorsÚasciir)ÚbufsizeÚstdinÚstderrÚstdoutÚcwdÚ preexec_fnÚenvÚwin32Ú startupinfoZ creationflagsÚposix)rF)ÚtargetT)$Úsuperr Ú__init__ÚosÚlinesepÚencodeZcrlfZ string_typeÚdictÚ subprocessÚPIPEZSTDOUTÚsysÚplatformZ STARTUPINFOZdwFlagsZSTARTF_USESHOWWINDOWZCREATE_NEW_PROCESS_GROUPÚ isinstancerÚshlexÚsplitÚnameÚPopenÚprocÚpidÚclosedÚ_bufrÚ _read_queueÚ threadingÚThreadÚ_read_incomingZ _read_threadÚ setDaemonÚstart) ÚselfÚcmdr rrrrrrrrÚkwargsr©Ú __class__©ú7/usr/lib/python3.9/site-packages/pexpect/popen_spawn.pyr s4þ þ     zPopenSpawn.__init__FcCsô|j}|jr8|r*||d…|_|d|…Sd|_tdƒ‚|dkrH|j}n |durTd}t ¡}t ¡||krÈ|rÈt|ƒ|krÈz|j ¡}Wnt y YqÈYq\0|dur²d|_qÈ||j j |dd�7}q\|d|…||d…}|_|  |d¡|S)NTzEnd Of File (EOF).éÿÿÿÿg€„.AF©ÚfinalÚread) r1Ú_read_reached_eofZflag_eofrr ÚtimeÚlenr2Z get_nowaitrZ_decoderÚdecodeÚ_log)r8Úsizer ÚbufZt0ZincomingÚrr=r=r>Úread_nonblockingAs0     zPopenSpawn.read_nonblockingc Csx|jj ¡}d}zt |d¡}Wn0tyP}z| |d¡WYd}~n d}~00|sf|j d¡dS|j |¡q dS)z6Run in a thread to move output from a pipe to a queue.óirBN) r.rÚfilenor!rBÚOSErrorrGr2Zput)r8rMrIÚer=r=r>r5ds " zPopenSpawn._read_incomingcCs| |¡dS)zHThis is similar to send() except that there is no return value. N©Úsend)r8Úsr=r=r>ÚwriteuszPopenSpawn.writecCs|D]}| |¡qdS)zëThis calls write() for each element in the sequence. The sequence can be any iterable object producing strings, typically a list of strings. This does not add line separators. There is no return value. NrP)r8ZsequencerRr=r=r>Ú writelineszszPopenSpawn.writelinescCsR| |¡}| |d¡|jj|dd�}tr8|jj |¡S|jj |¡t|ƒSdS)zZSend data to the subprocess' stdin. Returns the number of bytes written. rQFr@N) Z_coerce_send_stringrGZ_encoderr#rr.rrSrE)r8rRÚbr=r=r>rQ„s  zPopenSpawn.sendÚcCs| |¡}|| |j¡S)z†Wraps send(), sending string ``s`` to child process, with os.linesep automatically appended. Returns number of bytes written. )rQr")r8rRÚnr=r=r>Úsendline•s zPopenSpawn.sendlinecCs8|j ¡}|dkr ||_d|_nd|_| |_d|_|S)zKWait for the subprocess to finish. Returns the exit code. rNT)r.ÚwaitZ exitstatusZ signalstatusZ terminated)r8Ústatusr=r=r>rYœs zPopenSpawn.waitcCsTtjdkr@|tjtjfvr"tj}n|tjtjfvr:tj}ntj}t  |j j |¡dS)z}Sends a Unix signal to the subprocess. Use constants from the :mod:`signal` module to specify which signal. rN) r'r(ÚsignalÚSIGINTZ CTRL_C_EVENTZSIGBREAKZCTRL_BREAK_EVENTÚSIGTERMr!Úkillr.r/)r8Zsigr=r=r>r^«s zPopenSpawn.killcCs|jj ¡dS)z+Closes the stdin pipe from the writing end.N)r.rÚclose)r8r=r=r>ÚsendeofºszPopenSpawn.sendeof) r r NNNNNr N)rV)Ú__name__Ú __module__Ú __qualname__r rCrKr5rSrTrQrXrYr^r`Ú __classcell__r=r=r;r>r sþ*#  r )Ú__doc__r!r3r%r'rDr[r*ZqueuerrÚ ImportErrorZ spawnbaserrÚ exceptionsrZutilsrr r=r=r=r>Ús