403Webshell
Server IP : 121.121.20.254  /  Your IP : 216.73.217.51
Web Server : Microsoft-IIS/10.0
System : Windows NT WEB-SERVER 10.0 build 20348 (Windows Server 2022) AMD64
User : IUSR ( 0)
PHP Version : 8.3.28
Disable Function : NONE
MySQL : ON  |  cURL : ON  |  WGET : OFF  |  Perl : OFF  |  Python : OFF  |  Sudo : OFF  |  Pkexec : OFF
Directory :  C:/Python313/Lib/test/__pycache__/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : C:/Python313/Lib/test/__pycache__/test_subprocess.cpython-313.pyc
�

��iq�����SSKrSSKJr SSKJr SSKJr SSKJr SSKJr SSKJr SSK	J
r
 SSKrSSKrSSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSS	KJr SSK r SSK"r"SSK#r#SSK$r$SSK%r%\RL(a\RN"S
5e\RP(d\RN"S5e\RRS:Hr*\*(aS
r+OSr+Sr,\-\.\/4r0\RbSS4q2Sr3"SS\Rh5r5"SS\65r7"SS\Rp5r9"SS\55r:"SS\55r;Sr<\Rz"\*S5"SS \555r>\R~"\*S!5"S"S#\555r@"S$S%\Rh5rA\R~"\B"\S&5S'5"S(S)\:55rC\R~"\*S*5"S+S,\555rD"S-S.\55rE\FS/:Xa\R�"5 gg!\!a Sr GN�f=f!\!a Sr"GN�f=f!\!a Sr#GN�f=f!\!a Sr$GN�f=f! Sr%GN�=f)0�N)�mock)�support)�check_sanitizer)�
import_helper)�	os_helper)�warnings_helper)�assert_python_ok)�FakePathztest is not helpful for PGOztest module requires subprocess�win32z@import msvcrt; msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY);�)�nonexisting_i_hope�-c�passc���[R"S5nUcg[R"U[R5(a*[
R"U/5RS:XaU4qggg)N�truer)	�shutil�which�os�access�X_OK�
subprocess�run�
returncode�ZERO_RETURN_CMD)�
shell_trues �)C:\Python313\\Lib\test\test_subprocess.py�setUpModulerNsX�����f�%�J����
�	�	�*�b�g�g�&�&����
�|�$�/�/�1�4�%�-��	5�	'�c� �\rSrSrSrSrSrg)�BaseTestCase�Xc�.�[R"5 g�N)r�
reap_children��selfs r�setUp�BaseTestCase.setUpYs��	���rc��[(d\[RHnUR5 M [R"5 UR[RS5 UR
5 [R"5 g)Nzsubprocess._active not empty)	�	mswindowsr�_active�wait�_cleanup�assertFalse�
doCleanupsrr$)r&�insts  r�tearDown�BaseTestCase.tearDown^s^���y�"�*�*���	�	��+����!�����"�"�$B�
�	
�������r�N��__name__�
__module__�__qualname__�__firstlineno__r'r1�__static_attributes__r3rrr r Xs�� �

 rr c��\rSrSrSrg)�PopenTestException�kr3N)r5r6r7r8r9r3rrr;r;ks��rr;c��\rSrSrSrSrSrg)�PopenExecuteChildRaises�oz]Popen subclass for testing cleanup of subprocess.PIPE filehandles when
_execute_child fails.
c��[S5e)NzForced Exception for Test)r;)r&�args�kwargss   r�_execute_child�&PopenExecuteChildRaises._execute_childss�� �!<�=�=rr3N)r5r6r7r8�__doc__rCr9r3rrr>r>os���>rr>c�	�\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSrSr \!RD"\#S5S 5r$\!RD"\#S5S!5r%\!RD"\#S5S"5r&S#r'S$r(S%r)S&r*S'r+S(r,\!RD"\#S)5S*5r-\!RD"\#S)5S+5r.S,r/\!RD"\0Rb\0Rd:gS-5S.5r3\!RD"\0Rb\0Rd:gS-5\!RD"\4Rj"5S/5S055r6S1r7S2r8S3r9S4r:S5r;S6r<S7r=S8r>S9r?S:r@S;rAS<rBS=rCS>rDS?rES@rF\!R�"\H=(a	 \I"\HSA5SB5SC5rJ\!R�"\H=(a	 \I"\HSA5SB5SD5rKSErL\!R�"\0R�SF:HSG5SH5rN\!RD"\0R�SF:HSI5\!RD"\4R�"SJ5SK:HSL5\!RD"\P"SMSN9SO5SP555rQ\!RD"\4R�"SJ5SK:HSQ5\!RD"\P"SMSN9SO5SR55rRSSrSSTrT\!R�"\0R�SF:HSG5SU5rUSVrVSWrWSXrXSYrYSZrZS[r[S\r\S]r]S^r^S_r_S`r`SaraSbrbScrcSdrdSereSfrfSgrgShrhSiriSjrjSkrkSlrlSmrmSnrnSoroSprpSqrqSrrrSsrsStrt\uR�"Su5Sv5rwSwrxSxrySyrzSzr{S{r|S|r}S}r~S~r\!R�"\I"\�S5S�5\!R�"\I"\�S�5S�5\!R�"\I"\�S�5S�5S�555r�\!R�"\�GRGR	S�\�GR
"5-5S�5S�5r�\!RD"\#S�5S�5r�\!RD"\#S�5S�5r�S�r�\!R�"\I"\�S�5S�5S�5r�S�r�S�r�g�)��ProcessTestCase�wc��[R"[[R[R[RS9nUR	UR
[R5 UR	UR[R5 UR	UR[R5 UR
R5 URR5 URR5 UR5 g!UR
R5 URR5 URR5 UR5 f=f)N��stdin�stdout�stderr)r�Popenr�PIPE�assertIsInstancerK�io�BufferedIOBaserLrM�closer,�r&�ps  r�test_io_buffered_by_default�+ProcessTestCase.test_io_buffered_by_defaultys������_�#-�?�?�:�?�?�$.�O�O�
5��	��!�!�!�'�'�2�+<�+<�=��!�!�!�(�(�B�,=�,=�>��!�!�!�(�(�B�,=�,=�>�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H��
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�s�A>D$�$A Fc��[R"[[R[R[RSS9nUR	UR
[R5 UR	UR[R5 UR	UR[R5 UR
R5 URR5 URR5 UR5 g!UR
R5 URR5 URR5 UR5 f=f)Nr)rKrLrM�bufsize)rrNrrOrPrKrQ�	RawIOBaserLrMrSr,rTs  r�test_io_unbuffered_works�(ProcessTestCase.test_io_unbuffered_works�s������_�#-�?�?�:�?�?�$.�O�O�Q�
@��	��!�!�!�'�'�2�<�<�8��!�!�!�(�(�B�L�L�9��!�!�!�(�(�B�L�L�9�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H��
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�s�A>D%�%A Fc�v�[R"[RSS/5nUR	US5 g�Nr�import sys; sys.exit(47)�/�r�call�sys�
executable�assertEqual�r&�rcs  r�
test_call_seq�ProcessTestCase.test_call_seq�s0��
�_�_�c�n�n�d�8�:�;������R� rc��UR[R[R[R
SS/SS9 g)Nr�while True: pass皙�����?��timeout)�assertRaisesr�TimeoutExpiredrbrcrdr%s r�test_call_timeout�!ProcessTestCase.test_call_timeout�s7��
	
���*�3�3�Z�_�_��>�>�4�1C�D�"%�	�	'rc���[R"[RSS/SS9 UR	S5 [R"[RSS/SS9 UR	S5 g![R
a%nUR
S[U55 SnANmSnAff=f![R
a%nUR
S[U55 SnAgSnAff=f)	Nrzimport time;time.sleep(9)���rmz,Expected TimeoutExpired exception not raisedz
-1 secondsrz	0 seconds)rrrcrd�failrp�assertIn�str)r&�es  r�test_timeout_exception�&ProcessTestCase.test_timeout_exception�s���	F��N�N�C�N�N�D�2M�N�Z\�]�
�I�I�D�E�	F��N�N�C�N�N�D�2M�N�Z[�\�
�I�I�D�E���(�(�	0��M�M�,��A��/�/��	0���(�(�	/��M�M�+�s�1�v�.�.��	/�s.�&A2�&B.�2B+�B&�&B+�.C'�C"�"C'c�\�[R"[5nURUS5 g�Nr)r�
check_callrrerfs  r�test_check_call_zero�$ProcessTestCase.test_check_call_zero�s"��
�
"�
"�?�
3������Q�rc��UR[R5n[R"[R
SS/5 SSS5 UR
WRRS5 g!,(df   N5=fr^)	ror�CalledProcessErrorr}rcrdre�	exceptionr�r&�cs  r�test_check_call_nonzero�'ProcessTestCase.test_check_call_nonzero�sa��
�
�
�z�<�<�
=���!�!�3�>�>�4�#=�#?�
@�>�	
������/�/��4�>�
=���(A7�7
Bc��[R"[RSS/5nUR	SU5 UR[S5 [R"/SS9 SSS5 UR[S5 [R"/SS9 SSS5 g!,(df   NC=f!,(df   g=f)	Nr�
print('BDFL')�BDFLz2stdout argument not allowed, it will be overridden�rLz1check argument not allowed, it will be overriddenF��check)r�check_outputrcrdrv�assertRaisesRegex�
ValueError�r&�outputs  r�test_check_output�!ProcessTestCase.test_check_output�s����(�(������7�9���
�
�g�v�&�
�
#�
#�J�D�F��#�#�B�t�4�F��
#�
#�J�C�E��#�#�B�e�4�E�E�	F�F��E�E�s�B#�B4�#
B1�4
Cc��UR[R5n[R"[R
SS/5 SSS5 UR
WRRS5 g!,(df   N5=f)Nrzimport sys; sys.exit(5)�)	rorr�r�rcrdrer�rr�s  r�test_check_output_nonzero�)ProcessTestCase.test_check_output_nonzero�s`��
�
�
�z�<�<�
=���#�#��^�^�T�+D�E�
G�>�	
������/�/��3�>�
=�r�c��[R"[RSS/[RS9nURSU5 g)Nr�$import sys; sys.stderr.write('BDFL')�rMr�)rr�rcrd�STDOUTrvr�s  r�test_check_output_stderr�(ProcessTestCase.test_check_output_stderr�s:���(�(�����'M�N�!�(�(�*��	
�
�
�g�v�&rc��[R"5nURUR5 UR	S5 URS5 [R"[RSS/US9nURSU5 g)N�pearrr�6import sys; sys.stdout.write(sys.stdin.read().upper())�rK�PEAR)�tempfile�
TemporaryFile�
addCleanuprS�write�seekrr�rcrdrv)r&�tfr�s   r�test_check_output_stdin_arg�+ProcessTestCase.test_check_output_stdin_arg�sl��
�
#�
#�
%��������!�
�����
����
��(�(�����I�K����	
�
�
�g�v�&rc�t�[R"[RSS/SS9nUR	SU5 g)Nrr�r���inputr��rr�rcrdrvr�s  r�test_check_output_input_arg�+ProcessTestCase.test_check_output_input_arg�s7���(�(�����I�K����	
�
�
�g�v�&rc�t�[R"[RSS/SS9nUR	SU5 g)z<input=None has a legacy meaning of input='' on check_output.r�3import sys; print('XX' if sys.stdin.read() else '')Nr�sXX�rr�rcrd�assertNotInr�s  r�test_check_output_input_none�,ProcessTestCase.test_check_output_input_none�s9���(�(�����F�H����	
�����'rc�v�[R"[RSS/SSS9nUR	SU5 g)Nrr�T)r��text�XXr�r�s  r�!test_check_output_input_none_text�1ProcessTestCase.test_check_output_input_none_text�s;���(�(�����F�H���'��	
����v�&rc�v�[R"[RSS/SSS9nUR	SU5 g)Nrr�T)r��universal_newlinesr�r�r�s  r�/test_check_output_input_none_universal_newlines�?ProcessTestCase.test_check_output_input_none_universal_newlines�s;���(�(�����F�H��t�5��	
����v�&rc�x�[R"[RSS/SSSS9nUR	SU5 g)Nrzprint('foo')�utf-8�ignore)r��encoding�errors�foor�r�s  r�,test_check_output_input_none_encoding_errors�<ProcessTestCase.test_check_output_input_none_encoding_errorss7���(�(�����~�6��W�X�?��	
�
�
�e�V�$rc�>�UR[5n[R"[R
SS/[RS9nURS5 SSS5 URSWRRS5 g!,(df   N8=f)Nr�print('will not be run')r�z-Expected ValueError when stdout arg supplied.rLr)ror�rr�rcrdrLrurvr�rA�r&r�r�s   r�test_check_output_stdout_arg�,ProcessTestCase.test_check_output_stdout_arg
st��
�
�
�z�
*�a��,�,��^�^�T�+E�F��:�:�'�F�
�I�I�E�F�	+�
	
�
�
�h���� 0� 0�� 3�4�+�
*�s�AB�
Bc��[R"5nURUR5 UR	S5 URS5 UR
[5n[R"[RSS/USS9nURS5 SSS5 URSWRRS5 URS	URRS5 g!,(df   Na=f)
Nr�rrr��hare�rKr��7Expected ValueError when stdin and input args supplied.rKr�)r�r�r�rSr�r�ror�rr�rcrdrurvr�rA�r&r�r�r�s    r�&test_check_output_stdin_with_input_arg�6ProcessTestCase.test_check_output_stdin_with_input_args���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�
*�a��,�,��^�^�T�+E�F��G�-�F�
�I�I�O�P�	+�
	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�
+�
*�s�(9C<�<
D
c���UR[R5n[R"[R
SS/SS9nSSS5 g!,(df   g=f)Nr�import time; time.sleep(3600)rlrm)rorrpr�rcrdr�s   r�test_check_output_timeout�)ProcessTestCase.test_check_output_timeout!sH��
�
�
�z�8�8�
9�Q��,�,��^�^�T�4�6��!�F�:�
9�
9�s�'A�
Ac��[RR5nSUS'[R"[
RSS/US9nURUS5 g)N�banana�FRUITrz5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")��env�)r�environ�copyrrbrcrdre)r&�newenvrgs   r�test_call_kwargs� ProcessTestCase.test_call_kwargs)sT�������"��"��w��
�_�_�c�n�n�d�G�H�"(�)��	
����Q�rc��[R"5nUR[[R
SS9 [R
RRRnS/US--nUR"[[R
/UQ76 SSS5 URWR5S5 g!,(df   N/=f)Nr�)�invalid_arg_namerr)r�captured_stderrro�	TypeErrorrrN�__init__�__code__�co_argcountre�getvalue)r&�s�argcount�
too_many_argss    r�test_invalid_args�!ProcessTestCase.test_invalid_args3s����
$�
$�
&�!����i��)9�)9�A��N�!�'�'�0�0�9�9�E�E�H��C�8�a�<�0�M����i��)9�)9�J�M�J�	'�
	
�������r�*�'�
&�s�BC�
Cc�v�[R"[RSS/[R[RS9nURURR5 URURR5 UR5 URURS5 g)Nr�print("banana")�rLrM)rrNrcrdrOr�rLrSrMr,rerKrTs  r�test_stdin_none�ProcessTestCase.test_stdin_none=ss�����c�n�n�d�4E�F� *���
���
I����������'���������'�	����������$�'rc��Sn[R"[RSU/[R[RS9nURURR5 URURR5 UR5up4URURSU5 URUR5S5 g)Nz�import sys; from subprocess import Popen, PIPE;p = Popen([sys.executable, "-c", "print('test_stdout_none')"],          stdin=PIPE, stderr=PIPE);p.wait(); assert p.stdout is None;rr�rstest_stdout_none�
rrNrcrdrOr�rLrSrM�communicaterer�rstrip�r&�coderU�out�errs     r�test_stdout_none� ProcessTestCase.test_stdout_noneFs���5��
���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���������q�#�.��������':�;rc�v�[R"[RSS/[R[RS9nURURR5 URURR5 UR5 URURS5 g)Nrr��rKrL)rrNrcrdrOr�rLrSrKr,rerMrTs  r�test_stderr_none� ProcessTestCase.test_stderr_none]ss�����c�n�n�d�4E�F�)���z���
H����������'�������
�
�&�	����������4�(rc��US/-n[R"U40UD6nUR5 URSUR5 g�Nr_r`)rrNr,rer)r&�pre_argsrBrArUs     r�_assert_python�ProcessTestCase._assert_pythonfsD���5�6�6�����T�,�V�,��	��������Q�\�\�*rc���[RR[RR[R
5S5nUR
US/[R
S9 g�N�doesnotexistr�rd)r�path�join�dirnamercrdr�r&rs  r�test_executable�ProcessTestCase.test_executablensH���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�S�^�^��Lrc��[RR[RR[R
5S5nUR
US/[R"[R
5S9 gr
)rr
rrrcrdr�fsencoders  r�test_bytes_executable�%ProcessTestCase.test_bytes_executableysU���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�')�{�{�3�>�>�'B�	�	Drc���[RR[RR[R
5S5nUR
US/[[R
5S9 gr
)rr
rrrcrdrr
rs  r�test_pathlike_executable�(ProcessTestCase.test_pathlike_executablesQ���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�'/����'?�	�	Arc��[RS/nURU5 UR[URU[
SS9 g)Nrrr)rcrdrro�NONEXISTING_ERRORS�NONEXISTING_CMD)r&rs  r� test_executable_takes_precedence�0ProcessTestCase.test_executable_takes_precedence�sI���N�N�D�)�����H�%����,��-�-�x�%4�Q�%7�	�	9rz"executable argument replaces shellc�B�UR/[RSS9 g�NT)rd�shell)rrcrdr%s r�test_executable_replaces_shell�.ProcessTestCase.test_executable_replaces_shell�s��	
���B�3�>�>���Frc�j�UR/[R"[R5SS9 gr )rrrrcrdr%s r�$test_bytes_executable_replaces_shell�4ProcessTestCase.test_bytes_executable_replaces_shell�s)�����B�2�;�;�s�~�~�+F�"&�	�	(rc�T�UR/[[R5SS9 gr )rr
rcrdr%s r�'test_pathlike_executable_replaces_shell�7ProcessTestCase.test_pathlike_executable_replaces_shell�s%�����B�8�C�N�N�+C�"&�	�	(rc��[R"U5 [R"5sSSS5 $!,(df   g=fr#)r�
change_cwdr�getcwd)r&�cwds  r�_normalize_cwd�ProcessTestCase._normalize_cwd�s'���
!�
!�#�
&��9�9�;�'�
&�
&�s	�6�
Ac��[RR[R5n[RRU5$r#)rr
�realpathrcrd�split)r&�python_paths  r�_split_python_path�"ProcessTestCase._split_python_path�s-���g�g�&�&�s�~�~�6���w�w�}�}�[�)�)rc��[R"USS/4S[R0UD6nURURR
5 UR
5 URSUR5 [RRnURU"U5U"URR5R555 g)Nrzcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rLr`)rrNrOr�rLrSr,rerrr
�normcase�read�decode)r&�expected_cwd�
python_argrBrUr7s      r�_assert_cwd�ProcessTestCase._assert_cwd�s���
���j�$�-�.�
(�&0�_�_�

(�!'�
(��	
��������'�	��������Q�\�\�*��7�7�#�#������,�/�!�!�(�(�-�-�/�"8�"8�":�;�	=rc��[R"5nURU5nURU[R
US9 g�N�r-)r��
gettempdirr.r<rcrd�r&�temp_dirs  r�test_cwd�ProcessTestCase.test_cwd�s9���&�&�(���&�&�x�0������3�>�>�x��@rc��[R"5nURU5nURU[R
[R"U5S9 gr?)r�rAr.r<rcrdrrrBs  r�test_cwd_with_bytes�#ProcessTestCase.test_cwd_with_bytes�sB���&�&�(���&�&�x�0������3�>�>�r�{�{�8�7L��Mrc��[R"5nURU5nURU[R
[
U5S9 gr?)r�rAr.r<rcrdr
rBs  r�test_cwd_with_pathlike�&ProcessTestCase.test_cwd_with_pathlike�s>���&�&�(���&�&�x�0������3�>�>�x��7I��Jrz"pending resolution of issue #15533c��UR5up[RR[RU5n[
R"5nUR[[RU/5 UR[[RU/US9 URU5nURXUS9 SSS5 g!,(df   g=fr?�
r4rr
r�curdirr�temp_cwdro�FileNotFoundErrorrrNr.r<)r&�
python_dir�python_base�
rel_python�	wrong_dirs     r�test_cwd_with_relative_arg�*ProcessTestCase.test_cwd_with_relative_arg�s���#'�"9�"9�";��
��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�Y�
���/��1A�1A�)�l�
,����/��1A�1A�)�l�	�
�
;��,�,�Z�8�J����Z���D�"�
!�
!�s
�A-C�
Cc	��UR5up[RR[RU5nSn[
R"5nUR[[RU/US9 UR[[RU/UUS9 URU5nURXUUS9 SSS5 g!,(df   g=f)N�somethingyoudonthaver�rdr-rM)r&rQrRrS�doesntexistrTs      r�!test_cwd_with_relative_executable�1ProcessTestCase.test_cwd_with_relative_executable�s���#'�"9�"9�";��
��W�W�\�\�"�)�)�[�9�
�,��
�
�
�
!�Y�
���/��1A�1A�*�m�
�
�
D����/��1A�1A�*�m�
�"+�
�
-��,�,�Z�8�J����Z��!+�
�
-�"�
!�
!�s
�A.C�
Cc��UR5up[RRX5n[RR[RU5n[
R"5nUR[[RU/US9 URU5nURXSUS9 SSS5 g!,(df   g=fr?)
r4rr
rrNrrCrorPrrNr.r<)r&rQrR�
abs_pythonrSrTs      r�test_cwd_with_absolute_arg�*ProcessTestCase.test_cwd_with_absolute_arg�s���#'�"9�"9�";��
��W�W�\�\�*�:�
��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�Y�
���/��1A�1A�)�l�	�
�
;��+�+�I�6�I����Y�	��B�
"�
!�
!�s
�5AC�
CzTest is not venv-compatiblec��UR5upURU5nURUS[RUS9 g)NrXrY)r4r.r<rcrd)r&rQrRs   r�test_executable_with_cwd�(ProcessTestCase.test_executable_with_cwdsG��#'�"9�"9�";��
��(�(��4�
�����%;�$'�N�N�
�	�	Drz#need an installed Python. See #7774c�h�UR[R"5S[RS9 g)NrXr)r<rr,rcrdr%s r�test_executable_without_cwd�+ProcessTestCase.test_executable_without_cwd
s)��	
�������&<�$'�N�N�	�	4rc�.�[R"[RSS/[RS9nUR
R
S5 UR
R5 UR5 URURS5 g)Nr�0import sys; sys.exit(sys.stdin.read() == "pear")r�r�r�)rrNrcrdrOrKr�rSr,rerrTs  r�test_stdin_pipe�ProcessTestCase.test_stdin_pipesf�����c�n�n�d�K�M�(�o�o�
/��	
���
�
�g��	���
�
��	����������q�)rc��[R"5nURUR5 UR	5n[
R"US5 [
R"USS5 [R"[RSS/US9nUR5 URURS5 g�Nr�rrrhr�r�)r�r�r�rS�filenorr��lseekrrNrcrdr,rer�r&r��drUs    r�test_stdin_filedes�"ProcessTestCase.test_stdin_filedess���
�
#�
#�
%��������!��I�I�K��
����G��
����A�q�����c�n�n�d�K�M� �
"��	
����������q�)rc�L�[R"5nURUR5 UR	S5 URS5 [R"[RSS/US9nUR5 URURS5 grl)
r�r�r�rSr�r�rrNrcrdr,rer�r&r�rUs   r�test_stdin_fileobj�"ProcessTestCase.test_stdin_fileobj+sz��
�
#�
#�
%��������!�
�����
����
����c�n�n�d�K�M�!�
#��	
����������q�)rc��[R"[RSS/[RS9nU URURR5S5 SSS5 g!,(df   g=f)Nr�&import sys; sys.stdout.write("orange")r��orange�rrNrcrdrOrerLr8rTs  r�test_stdout_pipe� ProcessTestCase.test_stdout_pipe7sS�����c�n�n�d�B�D� *���
1������Q�X�X�]�]�_�i�8��Q�Q���+A+�+
A9c�n�[R"5nURUR5 UR	5n[
R"[RSS/US9nUR5 [R"USS5 UR[R"US5S5 g)Nrrxr�r�ry�r�r�r�rSrmrrNrcrdr,rrnrer8ros    r�test_stdout_filedes�#ProcessTestCase.test_stdout_filedes?s���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�B�D� !�
#��	
����
����A�q���������D�)�9�5rc�2�[R"5nURUR5 [R
"[RSS/US9nUR5 URS5 URUR5S5 g)Nrrxr�rry�r�r�r�rSrrNrcrdr,r�rer8rts   r�test_stdout_fileobj�#ProcessTestCase.test_stdout_fileobjKsp��
�
#�
#�
%��������!����c�n�n�d�B�D� "�
$��	
����
����
��������I�.rc��[R"[RSS/[RS9nU URURR5S5 SSS5 g!,(df   g=f)Nr�*import sys; sys.stderr.write("strawberry")r��
strawberry)rrNrcrdrOrerMr8rTs  r�test_stderr_pipe� ProcessTestCase.test_stderr_pipeVsS�����c�n�n�d�F�H� *���
1������Q�X�X�]�]�_�m�<��Q�Q�r}c�n�[R"5nURUR5 UR	5n[
R"[RSS/US9nUR5 [R"USS5 UR[R"US5S5 g)Nrr�r�rrr�r�ros    r�test_stderr_filedes�#ProcessTestCase.test_stderr_filedes^s���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�F�H� !�
#��	
����
����A�q���������D�)�=�9rc�2�[R"5nURUR5 [R
"[RSS/US9nUR5 URS5 URUR5S5 g)Nrr�r�rr�r�rts   r�test_stderr_fileobj�#ProcessTestCase.test_stderr_fileobjjsp��
�
#�
#�
%��������!����c�n�n�d�F�H� "�
$��	
����
����
��������M�2rc�.�[R"[RSS/[R[RS9nUR5up#UR
US5 UR
US5 UR
URS5 g)Nrz�import sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)r�s42rr�rrNrcrdrOr�rer�r&rUrLrMs    r�,test_stderr_redirect_with_no_stdout_redirect�<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectusy��
���c�n�n�d�-�.�%/�O�O�$.�O�O�
5�������������'������%�������q�)rc��[R"[RSS/[R[R
S9nU UR
URR5S5 SSS5 g!,(df   g=f)Nr�Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r��appleorange)	rrNrcrdrOr�rerLr8rTs  r�test_stdout_stderr_pipe�'ProcessTestCase.test_stdout_stderr_pipe�s_�����c�n�n�d�;�<�
%/�O�O�$.�$5�$5�

7������Q�X�X�]�]�_�n�=��Q�Q�s�+A:�:
Bc�4�[R"5nURUR5 [R
"[RSS/UUS9nUR5 URS5 URUR5S5 g)Nrr�r�rr�r�rts   r�test_stdout_stderr_file�'ProcessTestCase.test_stdout_stderr_file�sv��
�
#�
#�
%��������!����c�n�n�d�;�<�
%'�$&�

(��	
����
����
��������N�3rc��Sn[R"[RSU/[R[RS9nURURR5 URURR5 UR5up4URURSU5 URUR5S5 g)Nz�import sys, subprocess; rc = subprocess.call([sys.executable, "-c",     "import os, sys; sys.exit(os.write(sys.stdout.fileno(), b'test with stdout=1'))"], stdout=1); assert rc == 18rr�rstest with stdout=1r�r�s     r�test_stdout_filedes_of_stdout�-ProcessTestCase.test_stdout_filedes_of_stdout�s���"��

���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���������q�#�.��������'<�=rc���[R"[RSS/[RS9nUR5 UR
URS5 g)Nrz'for i in range(10240):print("x" * 1024)r�)rrNrcrd�DEVNULLr,rerLrTs  r�test_stdout_devnull�#ProcessTestCase.test_stdout_devnull�sN�����c�n�n�d�2�3�&0�%7�%7�
9��	
����������4�(rc���[R"[RSS/[RS9nUR5 UR
URS5 g)Nrz=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r�)rrNrcrdr�r,rerMrTs  r�test_stderr_devnull�#ProcessTestCase.test_stderr_devnull�sN�����c�n�n�d�=�>�&0�%7�%7�	
9��
	
����������4�(rc���[R"[RSS/[RS9nUR5 UR
URS5 g)Nrzimport sys;sys.stdin.read(1)r�)rrNrcrdr�r,rerKrTs  r�test_stdin_devnull�"ProcessTestCase.test_stdin_devnull�sN�����c�n�n�d�2�3�%/�$6�$6�
8��	
����������$�'r�F_GETPIPE_SZz%fcntl.F_GETPIPE_SZ required for test.c��[R"5up[R"U[R5n[R"U5 [R"U5 US-n[
R"5nXE:a[R"S5e[R"[RSS/[R[R[RUS9nURURUR 4HFnUR#[R"UR%5[R5U5 MH URR'S5 URR	5 URR	5 UR R	5 UR)5 UR+5 g![R"U5 [R"U5 f=f!UR)5 UR+5 f=f)N�z+default pipesize too small to perform test.r�Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")�rKrLrM�pipesizer�)r�pipe�fcntlr�rSr�get_pagesize�unittest�SkipTestrrNrcrdrOrKrLrMrermr��killr,)r&�test_pipe_r�test_pipe_w�pipesize_defaultr��pagesize_defaultrU�fifos        r�test_pipesizes�ProcessTestCase.test_pipesizes�s���$&�7�7�9� ��	"�$�{�{�;��8J�8J�K���H�H�[�!��H�H�[�!�#�q�(��"�/�/�1���&��#�#�=�?�
?����
�^�^�T�*�
+��/�/�*�/�/��?�?�X�
7��	����!�(�(�A�H�H�5��� � ��K�K����
�u�/A�/A�B���6�
�G�G�M�M�'�"�
�G�G�M�M�O�
�H�H�N�N��
�H�H�N�N��
�F�F�H�
�F�F�H��7
�H�H�[�!��H�H�[�!��2
�F�F�H�
�F�F�H�s�%G*�3CH�*.H�"H=c�|�[R"[RSS/[R[R[RSS9nU [
R"5up#[R"U[R5n[R"U[R5n[
R"U5 [
R"U5 UR[R"URR5[R5U5 UR[R"URR5[R5U5 UR[R"URR5[R5U5 UR5 SSS5 g![
R"U5 [
R"U5 f=f!UR5 f=f!,(df   g=f)Nrr�rtr�)rrNrcrdrOrr�r�r�rSrerKrmrLrMr�)r&�proc�fp_r�fp_w�default_read_pipesize�default_write_pipesizes      r�test_pipesize_default�%ProcessTestCase.test_pipesize_default�sy�����
�^�^�T�*�
+��/�/�*�/�/��?�?�R�1���
��W�W�Y�
��#�,1�K�K��e�>P�>P�,Q�)�-2�[�[��u�?Q�?Q�-R�*��H�H�T�N��H�H�T�N�� � ��K�K��
�
� 1� 1� 3�U�5G�5G�H�)�+�� � ��K�K���� 2� 2� 4�e�6H�6H�I�*�,�� � ��K�K���� 2� 2� 4�e�6H�6H�I�*�,��	�	��-�T���H�H�T�N��H�H�T�N���	�	���-�T�s>�H-�H�0A
G'�:DH�
H-�'.H�H�H*�*H-�-
H;c�0�[RR5nSUS'[R"[
RSS/[RUS9nUR5up4URUS5 SSS5 g!,(df   g=f)N�oranger�r�2import sys,os;sys.stdout.write(os.getenv("FRUIT"))�rLr�ry)
rr�r�rrNrcrdrOr�re�r&r�rUrLrMs     r�test_env�ProcessTestCase.test_envs{�������"��"��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�./��]�]�_�N�F����V�Y�/�
*�*�*�s�%B�
BrzWindows only issuec�L�[RR5nSUS'SUS'SUS'SUS'[R"/S	Q[R
US
9nUR
5up4URUR5S5 SSS5 g!,(df   g=f)N�cherry�fRUit�lemon�fruitr�r�r��frUit��CMDz/c�SETr�r�sfrUit=banana)	rr�r�rrNrOr�re�strip)r&r�rUrL�_s     r�test_win32_duplicate_envs�)ProcessTestCase.test_win32_duplicate_envs#s��������"��"��w��!��w��"��w��"��w��
�
�
�;�%/�_�_�"(�*�-.��
�
��I�F����V�\�\�^�_�=�	*�*�*�s�3B�
B#z#cannot test an empty env on Windows�Py_ENABLE_SHAREDr�zEThe Python shared library cannot be loaded with an empty environment.T)�addressz)AddressSanitizer adds to the environment.c��Sn[R"[RSS/[R0S9nUR5up4[
UR55nURU[5 UVs/sHnU"U5(aMUPM nnURU/5 SSS5 gs snf!,(df   g=f)z+Verify that env={} is as empty as possible.c��SU;=(d5 SU;=(d) US:H=(d URS5=(d US:H$)z:Determine if an environment variable is under our control.�	VERSIONER�__CF�
LD_PRELOAD�SANDBOX�LC_CTYPE)�
startswith)�ns r�is_env_var_to_ignore�<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore<sF��
 �1�$�$��!��$���%�$�)*���i�)@�$���O�
%rrz)import os; print(list(os.environ.keys()))r�N)rrNrcrdrOr��evalr�rP�listre)r&r�rUrLrM�child_env_names�ks       r�test_empty_env�ProcessTestCase.test_empty_env2s���	%��
�
�s�~�~�t�J�L�%/�_�_�"�>�AB��]�]�_�N�F�"�6�<�<�>�2�O��!�!�/�4�8�*9�?�/�Q�&:�1�&=� !�/�O�?����_�b�1�>�>��?�
>�>�s$�AB<�?B7�B7�B<�7B<�<
C
zLThe Python shared library cannot be loaded without some system environments.c�T�SS0n[RSS/n[RS:Xa/SQn[R"U[R
[R
US9nUR
5upEUR(aM[R(a8[SURS	S
55 [SURS	S
55 URURS5 URUR5S
5 SSS5 g!,(df   g=f)Nr�r�rz;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))rr�)rLrMr�zSTDOUT:�ascii�replacezSTDERR:rsfruit=orange)rcrd�platformrrNrOr�rr�verbose�printr9rer�)r&r��cmdrUrLrMs      r�test_one_environment_variable�-ProcessTestCase.test_one_environment_variableOs����8�$���~�~�t� O�P���<�<�7�"�/�C�
�
�
�c�*�/�/�*�/�/�W]�
^�bc��]�]�_�N�F��|�|�����i����w�	�!B�C��i����w�	�!B�C����Q�\�\�1�-����V�\�\�^�_�=�
_�
^�
^�s
�#B-D�
D'c�f�[RS-nUR[5 [R
"USS/5 SSS5 UR[5 [R
"[RSS/5 SSS5 g!,(df   NT=f!,(df   g=f)N�rrzpass#)rcrdror�rrN)r&r�s  r�test_invalid_cmd� ProcessTestCase.test_invalid_cmdcs{���n�n�t�#��
�
�
�z�
*����c�4��0�1�+��
�
�z�
*����c�n�n�d�I�>�?�+�
*�	+�
*��+�
*�s�B� (B"�
B�"
B0c��[RR5nSUS'UR[5 [
R"[US9 SSS5 [RR5nSUS'UR[5 [
R"[US9 SSS5 [RR5nSUS'UR[5 [
R"[US9 SSS5 [RR5nSUS'[
R"[RS	S
/[
RUS9nUR5up4URUS5 SSS5 g!,(df   GNI=f!,(df   GN=f!,(df   N�=f!,(df   g=f)
N�cabbagezFRUITVEGETABLEr�zorangeVEGETABLE=cabbager�r�zFRUIT=ORANGEzorange=lemonrz3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r�sorange=lemon)
rr�r�ror�rrNrrcrdrOr�rer�s     r�test_invalid_env� ProcessTestCase.test_invalid_envmsX�������"��%.��!�"�
�
�
�z�
*����_�&�9�+������"��5��w��
�
�
�z�
*����_�&�9�+������"��!(��~��
�
�
�z�
*����_�&�9�+������"��(��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�./��]�]�_�N�F����V�_�5�
*�*�%+�
*��+�
*��+�
*��*�*�s/�F�F'�-F9�'%G
�
F$�'
F6�9
G�

Gc��[RR5nSUS'UR[5 [
R"[US9 SSS5 [RR5nSUS'UR[5 [
R"[US9 SSS5 g!,(df   Ni=f!,(df   g=f)Nr�zFRUIT=VEGETABLEr�z==FRUIT)rr�r�ror�rrNr)r&r�s  r�test_win32_invalid_env�&ProcessTestCase.test_win32_invalid_env�s��������"��$-�� �!�
�
�
�z�
*����_�&�9�+������"��%��y��
�
�
�z�
*����_�&�9�+�
*�+�
*��
+�
*�s�B6�C�6
C�
Cc���[R"[RSS/[RS9nURS5 UR
URS5 g)Nrz/import sys;sys.exit(sys.stdin.read() == "pear")r�r�r�r�rTs  r�test_communicate_stdin�&ProcessTestCase.test_communicate_stdin�sQ�����c�n�n�d�E�F�$.�?�?�
4��	
�
�
�g��������q�)rc���[R"[RSS/[RS9nUR5up#UR
US5 UR
US5 g)Nrz)import sys; sys.stdout.write("pineapple")r��	pineapple�rrNrcrdrOr�rer�s    r�test_communicate_stdout�'ProcessTestCase.test_communicate_stdout�sZ�����c�n�n�d�I�K�$.�O�O�
5���=�=�?��������.������&rc���[R"[RSS/[RS9nUR5up#UR
US5 UR
US5 g)Nrz)import sys; sys.stderr.write("pineapple")r�rrr�s    r�test_communicate_stderr�'ProcessTestCase.test_communicate_stderr�sZ�����c�n�n�d�I�K�$.�O�O�
5���=�=�?��������&������.rc���[R"[RSS/[R[R[RS9nURURR5 URURR5 URURR5 URS5up#URUS5 URUS5 g)NrzNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())rJ�bananar)rrNrcrdrOr�rLrSrMrKr�rer�s    r�test_communicate� ProcessTestCase.test_communicate�s������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�

5��	
��������'���������'�������
�
�&��=�=��3��������+������.rc��Sn[U5n[R"[RSS/[R
[R
S9nUR
URR5 UR
URR5 URU5upEURXA5 URU5 g)NsHello, memoryview!rz.import sys; sys.stdout.write(sys.stdin.read())r)
�
memoryviewrrNrcrdrOr�rLrSrKr�re�assertIsNone)r&�	test_data�mvrUrLrMs      r�!test_communicate_memoryview_input�1ProcessTestCase.test_communicate_memoryview_input�s���)�	�
�	�
"�����c�n�n�d�N�P�#-�?�?�$.�O�O�
5��	
��������'�������
�
�&��=�=��,�������+����&�!rc
��SSKn[[SS5nUS-nURS[U5Vs/sHnSPM sn5nUR	5n[U5n[R"[RSS/[R[RS	9nURURR5 URURR5 URU5up�UR!X�S
[#U	5<S[#U5<3S9 UR%U
5 gs snf)
Nr�PIPE_BUFir��iifo0drzIimport sys; data = sys.stdin.buffer.read(); sys.stdout.buffer.write(data)rzlen(stdout)=z =? len(expected_bytes)=��msg)�array�getattr�select�range�tobytesrrrNrcrdrOr�rLrSrKr�re�lenr)r&r�pipe_buf�num_elementsr��
test_array�expected_bytesrrUrLrMs           r�)test_communicate_memoryview_input_nonbyte�9ProcessTestCase.test_communicate_memoryview_input_nonbyte�s��	��6�:�s�3�� �!�|���[�[��5��;N�&O�;N�a�z�;N�&O�P�
�#�+�+�-��
�
�
#�����c�n�n�d�>�?�$.�?�?�$.�O�O�
5��	
��������'�������
�
�&��=�=��,������� ,��F��~�-F�#�n�2E�1G�H�	�	J����&�!��'Ps�D>
c��[R"[RSS/S[R[R[RS9nUR[RURSSS9 UR5up#URUS5 URUR5S5 g)	Nrz~import sys,os,time;sys.stderr.write("pineapple\n");time.sleep(1);sys.stderr.write("pear\n");sys.stdout.write(sys.stdin.read())T)r�rKrLrMr�g333333�?rmspineapple
pear
)
rrNrcrdrOrorpr�re�encoder�s    r�test_communicate_timeout�(ProcessTestCase.test_communicate_timeout�s������c�n�n�d�C�D�15�#-�?�?�$.�O�O�$.�O�O�	
5��	
���*�3�3�Q�]�]�H�"%�	�	'��=�=�?��������*��������*>�?rc��[R"[RSS/[RS9nUR[RURSS9 UR5up#UR[U5S5 g)Nrz�import sys,os,time;sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));time.sleep(0.2);sys.stdout.write("a" * (64 * 1024));r�g�������?rmi)
rrNrcrdrOrorpr�rer")r&rUrLr�s    r�%test_communicate_timeout_large_output�5ProcessTestCase.test_communicate_timeout_large_output�sq�����c�n�n�d�E�F�%/�O�O�	
5��	
���*�3�3�Q�]�]�C��P��m�m�o�������V��m�4rc
�B�SS-n[R"[RSS/[R[R[RS9nSn[
R"5nURXS9 [
R"5U-
nURSUS	S
35 URUSSUS	S
US35 UR5upgUR[U5[U5S[U5S[U535 URXa5 UR5 UR5 g![Ra [
R"5U-
nN�f=f!UR5 UR5 f=f)N�xirzRimport sys, time; time.sleep(30); sys.stdout.buffer.write(sys.stdin.buffer.read())rJ皙�����?rmz6TimeoutExpired not raised. communicate() completed in z.2fzRs, but subprocess sleeps for 30s. Stdin writing blocked without enforcing timeout.g@zTimeoutExpired raised after z
s; expected ~z2s. Stdin writing blocked without checking timeout.z	Expected z bytes output but got )rrNrcrdrO�time�	monotonicr�rurp�
assertLessrer"r�r,)r&�
input_datarUrn�start�elapsedrLrMs        r�$test_communicate_timeout_large_input�4ProcessTestCase.test_communicate_timeout_large_inputsy���Z�(�
����
�^�^�T�@�
A��/�/��?�?��?�?�
$�� 	��G��N�N�$�E�	
3��
�
�j�
�:��.�.�*�U�2���	�	�L��s�m�$G�G�H�
�O�O�G�S�.�w�s�m�=��	�RB�B�
C��]�]�_�N�F�
���S��[�#�j�/��C�
�O�,�,B�3�v�;�-�P�
R����V�0�
�F�F�H�
�F�F�H��+�,�,�
3��.�.�*�U�2��
3��(
�F�F�H�
�F�F�H�s1�E<�1=E
�.A;E<�
,E9�6E<�8E9�9E<�<"Fc�~�SGH6nSGH+nSGH n0nU(a[RUS'U(a[RUS'U(a[RUS'U(dM][R"[40UD6nUR	5 UR
b%UR
UR
R5 URb%UR
URR5 URcM�UR
URR5 GM# GM. GM9 g)N�FTrKrLrM)
rrOrNrr�rK�
assertTrue�closedrLrM)r&�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrUs      r�test_communicate_pipe_fd_leak�-ProcessTestCase.test_communicate_pipe_fd_leakEs���'�J�,��#0�K� �G�!�+5�?�?���(�"�,6�O�O���)�"�,6�O�O���)�"� �"�(�(��D�G�D�A��M�M�O��w�w�*���������7��x�x�+���������8��x�x�+���������8�#$1� -�(rc��[R"[RSS/5nUR	5up#URUS5 URUS5 g)Nrr_)rrNrcrdr�rer�s    r�test_communicate_returns�(ProcessTestCase.test_communicate_returns[sP�����c�n�n�d�8�:�
;���=�=�?��������&������&rc��[R"5up[R"U5 [R"U5 [R"[
RSS[R-/[R[R[RS9nURURR5 URURR5 URURR5 S[R-nURU5upVURXT5 g)Nrzpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())rJ�a)rr�rSrrNrcrdr�
PIPE_MAX_SIZErOr�rLrMrKr�re)r&�x�yrU�string_to_writerLrMs       r�test_communicate_pipe_buf�)ProcessTestCase.test_communicate_pipe_bufcs����w�w�y���
�����
��������c�n�n�d�C�&�3�3�	4�5�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&���!6�!6�6���=�=��9�������1rc�*�[R"[RSS/[R[R[RS9nURURR5 URURR5 URURR5 URRS5 URS5up#URUS5 URUS5 g)Nrz0import sys,os;sys.stdout.write(sys.stdin.read())rJrssplitsbananasplitr)
rrNrcrdrOr�rLrSrMrKr�r�rer�s    r�test_writes_before_communicate�.ProcessTestCase.test_writes_before_communicatezs������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	���
�
�i� ��=�=��2��������0������%rc�l�[R"[RSS/[R[R[RS9nUR
R
5 UR5up#URURS5 SSS5 g!,(df   g=f)Nrzimport sys; sys.exit(0)rJr)
rrNrcrdrOrKrSr�rerr�s    r�)test_communicate_stdin_closed_before_call�9ProcessTestCase.test_communicate_stdin_closed_before_call�s{���
�
�s�~�~�t�8�:�$.�O�O�%/�_�_�%/�_�_�	6�:;�
�G�G�M�M�O� �}�}���V����Q�\�\�1�-�6�6�6�s
�A	B%�%
B3c�r�[RSS[-S-/nSGH�n[R"U40S[R
S[R
US0D6nU URRS5 URR5 URURR5S5 URRS	5 URR5 URURR5 URURR5S
5 URURRS5S	5 URURR5S5 SSS5 GM� g!,(df   GM�=f)
Nr�import sys,os;a@buf = sys.stdout.buffer;buf.write(sys.stdin.readline().encode());buf.flush();buf.write(b"line2\n");buf.flush();buf.write(sys.stdin.read().encode());buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");)r�r�rKrLTzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rcrd�	SETBINARYrrNrOrKr��flushrerL�readlinerSr�r8)r&rA�extra_kwargrUs    r� test_universal_newlines_and_text�0ProcessTestCase.test_universal_newlines_and_text�s?���N�N�D��y�(�
&�
&�'��(:�K�� � ��>�'�:�?�?�*2�J�O�O�*5�t�*=�>�A�����
�
�i�(����
�
��� � ����!2�!2�!4�i�@����
�
�i�(����
�
����������/�� � ����!2�!2�!4�!*�,�� � ������q�!1�!*�,�� � �������!D�F���	:���s
�D9F&�&
F6	c�|�[R"[RSS[-S-/[R
[R
SS9nUR
URR5 UR
URR5 UR5up#URUS5 g)NrrWz�buf = sys.stdout.buffer;buf.write(b"line2\n");buf.flush();buf.write(b"line4\n");buf.flush();buf.write(b"line5\r\n");buf.flush();buf.write(b"line6\r");buf.flush();buf.write(b"\nline7");buf.flush();buf.write(b"\nline8");r�)rMrLr�z#line2
line4
line5
line6
line7
line8)rrNrcrdrYrOr�rLrSrMr�rer�s    r�#test_universal_newlines_communicate�3ProcessTestCase.test_universal_newlines_communicate�s������c�n�n�d�.��:�8�8�
9�%/�O�O�$.�O�O�01�!
3��"	
��������'���������'��=�=�?�������C�	Erc��[R"[RSS[-[
R"S5-/[RSS9nURS5up#URURS5 g)NrrWa
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r�)rKr��line1
line3
r)rrNrcrdrY�textwrap�dedentrOr�rerr�s    r�)test_universal_newlines_communicate_stdin�9ProcessTestCase.test_universal_newlines_communicate_stdin�sq�����c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�01�
3���=�=�)9�:���������q�)rc���[R"[[R[RSS9nUR	5 URURS5 g)NT)rKrLr�r)rrNrrOr�rerrTs  r�.test_universal_newlines_communicate_input_none�>ProcessTestCase.test_universal_newlines_communicate_input_none�sF��

���_�#-�?�?�$.�O�O�04�
6��	
�
�
��������q�)rc�<�[R"[RSS[-[
R"S5-/[R[R[RSS9nURURR5 URURR5 URS5up#URURS5 URSU5 URUR!S	55 g)
NrrWa�
                               s = sys.stdin.buffer.readline()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line2\r")
                               sys.stderr.buffer.write(b"eline2\n")
                               s = sys.stdin.buffer.read()
                               sys.stdout.buffer.write(s)
                               sys.stdout.buffer.write(b"line4\n")
                               sys.stdout.buffer.write(b"line5\r\n")
                               sys.stderr.buffer.write(b"eline6\r")
                               sys.stderr.buffer.write(b"eline7\r\nz")
                              T)rKrMrLr�rcrzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrNrcrdrYrdrerOr�rLrSrMr�rerr=r�r�s    r�7test_universal_newlines_communicate_stdin_stdout_stderr�GProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderr�s������c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�$.�O�O�$.�O�O�04�!
6��"	
��������'���������'��=�=�)9�:���������q�)����>��G�	
����)�)�*D�E�Frc���SHqnSU-n[RSU/n[R"U[R[RUS9nURSS9upVUR
US5 Ms g)N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r)rKrLr�rr�z1
2
3
4)rcrdrrNrOr�re)r&r�r�rA�popenrLrMs       r�-test_universal_newlines_communicate_encodings�=ProcessTestCase.test_universal_newlines_communicate_encodings
s|��0�H�L���D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.6�8�E�#�.�.�R�.�8�N�F����V�\�2�0rc	��SH�upSn[RSU/n[R"U[R[RSUS9nURSS9upgUR
USRU55 M� g)	N))r�r)r�u��)�surrogateescapeu��)�backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')rr�)rKrLr�r�rr�z[{}])rcrdrrNrOr�re�format)r&r��expectedr�rArorLrMs        r�test_communicate_errors�'ProcessTestCase.test_communicate_errors#s���!
��F�>�D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.5�,2�	4�E�
#�.�.�R�.�8�N�F����V�V�]�]�8�%<�=�%!
rc���[(dSnOSn[(a�[R"[R5up#US:�aW[R"[RSU45 UR[R[RX#45 /n[R"5n[U5Hwn[RRU[R5nUR![R""U[R$[R&-55 My UR-SU-5 UR/5 [S5H'n[R0"UR355 M) [S5H{n[4R6"[8R:SS/[4R<[4R<[4R<S	9n	U	R?S
5Sn
URAU
S
5 M} UHn[R0"U5 M [BRD"U5 g![[4a GN�f=f![a,nUR([(R*:waeSnA GMNSnAff=f!UHn[R0"U5 M [BRD"U5 f=f)Niirz4failed to reach the file descriptor limit (tried %d)�
�rz-import sys;sys.stdout.write(sys.stdin.read())rJslimer)#r*�resource�	getrlimit�
RLIMIT_NOFILE�	setrlimitr��OSErrorr�r��mkdtempr rr
rr�TESTFN�append�open�O_WRONLY�O_CREAT�errno�EMFILE�skipTest�reverserS�poprrNrcrdrOr�rer�rmtree)r&�max_handles�soft�hard�handles�tmpdirr�tmpfilerxrU�data�hs            r�test_no_leaking�ProcessTestCase.test_no_leaking8s ���y��K��K��8�
�%�/�/��0F�0F�G�
���$�;��&�&�x�'=�'=��d�|�L��O�O�H�$6�$6��8N�8N�%)�L�2����!�!�#��	"��;�'��� �g�g�l�l�6�9�3C�3C�D�G��N�N�2�7�7�7�B�K�K��
�
�4J�#K�L�(��
�
�!�#.�/�0�
�O�O���2�Y���������'���2�Y���$�$�c�n�n�d�'K�&L�,6�?�?�,6�O�O�,6�O�O�=���}�}�W�-�a�0��� � ��w�/�����������M�M�&�!��G�Z�(�
��
�����w�w�%�,�,�.������0���������M�M�&�!�sJ�BI�8J(�A3I/�:C(J(�I,�+I,�/
J%�9J �J(� J%�%J(�(7Kc��UR[R"/SQ5S5 UR[R"/SQ5S5 UR[R"/SQ5S5 UR[R"/SQ5S5 UR[R"/S	Q5S
5 UR[R"/SQ5S5 UR[R"/S
Q5S5 UR[R"SS/5S5 g)N)za b crprxz"a b c" d e)�ab"c�\rpz	ab\"c \ d)r�z \rpz
ab\"c " \\" d)za\\\bzde fgr�za\\\b "de fg" h)za\"br�rpz
a\\\"b c d)za\\b crprxz"a\\b c" d e)za\\b\ crprxz
"a\\b\ c" d e�abrzab "")rer�list2cmdliner%s r�test_list2cmdline�!ProcessTestCase.test_list2cmdlineks�������0�0�1D�E�&�	(�����0�0�1D�E�&�	(�����0�0�1E�F�+�	-�����0�0�1K�L�-�	/�����0�0�1D�E�(�	*�����0�0�1G�H�)�	+�����0�0�1I�J�+�	-�����0�0�$���<� �	"rc��[R"[RSS/[RS9nURURR5 URUR55 [R"URR5S5 UR5 URUR5S5 g)Nrzimport os; os.read(0, 1)r��Ar)rrNrcrdrOr�rKrSr�pollrr�rmr,rerTs  r�	test_poll�ProcessTestCase.test_poll}s������c�n�n�d�8�:�#-�?�?�
4��	
������
�
�&����!�&�&�(�#�
��������!�4�(�	�����������1�%rc��[R"[5nURUR	5S5 URUR	5S5 gr|�rrNrrer,rTs  r�	test_wait�ProcessTestCase.test_wait�s>�����_�-���������1�%��������1�%rc��[R"[RSS/5nUR	[R
5nUR
SS9 SSS5 URS[WR55 URUR
[RS9S5 g!,(df   Na=f)Nrzimport time; time.sleep(0.3)�-C��6?rmz0.0001r)
rrNrcrdrorpr,rvrwr�rer�
SHORT_TIMEOUT)r&rUr�s   r�test_wait_timeout�!ProcessTestCase.test_wait_timeout�s������c�n�n�"�$B�D�
E��
�
�
�z�8�8�
9�Q�
�F�F�6�F�"�:��
�
�h��A�K�K� 0�1��������(=�(=��>��B�:�
9�s�B2�2
Cc��UR[5 [R"[S5 SSS5 g!,(df   g=f)Nr�)ror�rrNrr%s r�test_invalid_bufsize�$ProcessTestCase.test_invalid_bufsize�s.���
�
�y�
)����_�h�7�*�
)�
)�s	�;�
A	c���[R"[S5nURUR	5S5 [R"[SS9nURUR	5S5 g)Nr)rYr�rTs  r�test_bufsize_is_none�$ProcessTestCase.test_bufsize_is_none�sR�����_�d�3���������1�%����_�d�;���������1�%rc	���[R"[RSS/[R[R[R
SUS9nURRU5 [R"URR55 URR5n[R"5 URR5 SSS5 SUlSSS5 UR!WR"S5 UR!WU5 g![a NRf=f!,(df   N\=f!,(df   N^=f)NrzDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r�)rKrLrMrYr�r)rrNrcrdrOr�rKr�rrSrmrLr[r�SuppressCrashReportr�rer)r&�linervr�rU�	read_lines      r�_test_bufsize_equal_one�'ProcessTestCase._test_bufsize_equal_one�s��
�
�
�s�~�~�t�64�5�%/�O�O�%/�_�_�%/�%7�%7�&'�1C�E�IJ�
�G�G�M�M�$���H�H�Q�W�W�^�^�%�&����)�)�+�I��,�,�.���G�G�M�M�O�/�
�A�G�!E�"	
������q�)�����H�-��	�����/�.��E�E�sC�A9E�E�D0�*E�0
D=�:E�<D=�=E�
E	�
E�
Ec�(�SnURXSS9 g)Nzline
T�r�)r��r&r�s  r� test_bufsize_equal_one_text_mode�0ProcessTestCase.test_bufsize_equal_one_text_mode�s�����$�$�T�D�$�Irc���S[RR5-nUR[S5 URUSSS9 SSS5 g!,(df   g=f)Nslinezline bufferingrFr�)r�linesepr*�assertWarnsRegex�RuntimeWarningr�r�s  r�"test_bufsize_equal_one_binary_mode�2ProcessTestCase.test_bufsize_equal_one_binary_mode�sN������*�*�,�,��
�
"�
"�>�3C�
D��(�(��s�u�(�M�E�
D�
D�s�A�
A!�cpuc���[S5HWnUR[5 [R"[
[R[RS9 SSS5 MY g!,(df   Mk=f)Nrr�)r rorrrNrrO)r&rs  r�test_leaking_fds_on_error�)ProcessTestCase.test_leaking_fds_on_error�sN���t��A��"�"�#5�6�� � ��(2���(2���9�7�6��6�6�s�7A(�(
A7	c���SSKnUR [
R"S[<S35n[RSU/n[R"U[RSS9nU UR5SnSSS5 URWS	5 URURS5 g![[4a UR	S5 N�f=f!,(df   Nd=f)
Nrzneed msvcrt.CrtSetReportModezL
            import msvcrt
            import subprocess

            cmd = a

            for report_type in [msvcrt.CRT_WARN,
                                msvcrt.CRT_ERROR,
                                msvcrt.CRT_ASSERT]:
                msvcrt.CrtSetReportMode(report_type, msvcrt.CRTDBG_MODE_FILE)
                msvcrt.CrtSetReportFile(report_type, msvcrt.CRTDBG_FILE_STDERR)

            try:
                subprocess.Popen(cmd,
                                 stdout=subprocess.PIPE,
                                 stderr=subprocess.PIPE)
            except OSError:
                pass
        rT)rMr�r�r)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorr�rdrerrcrdrrNrOr�rer)r&r�r�r�r�rMs      r�test_nonexisting_with_pipes�+ProcessTestCase.test_nonexisting_with_pipes�s���	:���#�#����$�#�%�&	�	 �
��&�~�~�t�T�*������'1���37�9����%�%�'��*�F�������$�������!�,��;��,�	:��M�M�8�9�	:��4�T�s�B5�*C�5!C�C�
C*c�^�/mU4Sjn[R"US9nUR5 UR[5 [
R"[[
R[
R[
RS9 SSS5 UR5 SnTHn[R"U5 M UbUeg!,(df   NF=f![a
nUnSnAMGSnAff=f!UR5 SnTH4n[R"U5 M![a
nUnSnAM.SnAff=f UbUef=f)Nc�>�[S5H=nTR[R"55 [R
"S5 M? g)N�g����MbP?)r �extendrr�r3�sleep)r�fdss �r�open_fds�<ProcessTestCase.test_double_close_on_error.<locals>.open_fdss/����2�Y���
�
�2�7�7�9�%��
�
�5�!�r)�targetrJ)�	threading�Threadr7ror�rrNrrOrrrS)r&r��t�exc�fdrxr�s      @r�test_double_close_on_error�*ProcessTestCase.test_double_close_on_error�s�����	"�
���H�-��	���	�	��"�"�7�+�� � ��'1���(2���(2���9�,�
�F�F�H��C�����H�H�R�L�����	��!,�+�����C����
�F�F�H��C�����H�H�R�L�����C����
����	��sf�C5�AC
�
C5�*C�

C�C5�
C2�%C-�-C2�5E�D&�$E�&
D=	�0D8	�2E�8D=	�=Ec�&^^�[R"[RSS/5mUR	TR
S5 /mUU4Sjn[R"SU5nUR5 [(aSnOSnTR[RS9 UR	TR
US	S
9 TR5 UR	TR
USS
9 UR5 UR	SS
U4SU4/T5 g)z?Issue21291: Popen.wait() needs to be threadsafe for returncode.rzimport time; time.sleep(12)Nc�>�TRSTR545 TR5 TR5 TRSTR45 TR5 TRSTR45 g)N�thread-start-poll-result�thread-after-kill-and-wait�thread-after-second-wait)r�r�r�r,r)r��resultss��r�kill_proc_timer_thread�DProcessTestCase.test_threadsafe_wait.<locals>.kill_proc_timer_thread!sb����N�N�6��	�	��D�E��I�I�K��I�I�K��N�N�8�$�/�/�J�K��I�I�K��N�N�6����H�Irr2r�i����rmz*unexpected result in wait from main threadrz&unexpected result in second main wait.)r�Nr�r�)rrNrcrdrerr��Timerr7r*r,rr�r)r&r�r��expected_errorcoder�r�s    @@r�test_threadsafe_wait�$ProcessTestCase.test_threadsafe_waits����������!>�!@�A��������$�/���	J�
�O�O�C�!7�8��	���	��9�!"��"$��
	
�	�	�'�/�/�	�0�������*<�I�	�	K�	
�	�	��������*<�E�	�	G�	
����
	
���<�7�9K�L�5�7I�J�L�!�	"rc���SRS5n[R"[RSU/5nURUR
S5[U55 g)N�;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0rsHello World!)rrr�rcrdr=r�r�)r&r�r�s   r�test_issue8780�ProcessTestCase.test_issue8780NsQ���x�x�#�$��
�(�(�#�.�.�$��)E�F������)�)�/�:�E�&�M�Jrc��[R"5up[R"5up4[R"5upV[R"S/XUS9 UR[
RRU55 UR[
RRU55 UR[
RRU55 g![a� [
R"U5 [
R"U5 [
R"U5 [
R"U5 [
R"U5 [
R"U5 GNf=f)N�*rJ)r��mkstemprrNr�rrS�remover.r
�exists)r&�ifhandle�ifname�ofhandle�ofname�efhandle�efnames       r� test_handles_closed_on_exception�0ProcessTestCase.test_handles_closed_on_exceptionYs���$�+�+�-���#�+�+�-���#�+�+�-���		����s�e�8��
�	
���������/�0����������/�0����������/�0���	��H�H�X���I�I�f���H�H�X���I�I�f���H�H�X���I�I�f��
	�s�C)�)BE;�:E;c��[R"[[R[R[RS9nUR	UR
R5 UR	URR5 UR	URR5 URSS-5 g)NrJr1�)
rrNrrOr�rLrSrMrKr�rTs  r�test_communicate_epipe�&ProcessTestCase.test_communicate_epipemsw�����_�#-�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	�
�
�d�U�l�#rc�~�SSS/SSS4/SQSSS4[R"S5SS	S
4/n[RRR[RS5 UH;up#pE[R"X#S9nXFlUR[U5U5 M= SSS5 g!,(df   g=f)
N)�lsT�{z#<Popen: returncode: 123 args: 'ls'>)�daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTrzP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rFz&<Popen: returncode: None args: ['ls']>)rz	--my-optsrzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>z
my-tool.py�z4<Popen: returncode: 7 args: <FakePath 'my-tool.py'>>rC�r!)rr
r�r�patch�objectrrNrre�repr)r&�casesr�r!r��sxrUs       r�	test_repr�ProcessTestCase.test_reprxs���D�
a��V�U�D�"J�K�
+�U�D�
_�
a�
�
�
��
-�u�a�
C�
E�	
���]�]�
 �
 �
'�
'�
�(8�(8�:J�
K�(-�$��D��$�$�S�6��#��� � ��a��"�-�).�L�
K�
K�s
�#AB.�.
B<c���[R"[[RS9nUR	UR
R5 UR5 URSS-5 g)Nr�r1r�)	rrNrrOr�rKrSr,r�rTs  r�!test_communicate_epipe_only_stdin�1ProcessTestCase.test_communicate_epipe_only_stdin�sH�����_�#-�?�?�
4��������
�
�&�	����	�
�
�d�U�l�#r�SIGUSR1zRequires signal.SIGUSR1r�zRequires os.kill�getppidzRequires os.getppidc��Sn[R"[RU5nUR[R[RU5 [RSS/nSHEnU[
R0n[
R"U40UD6nUR5 SSS5 MG g!,(df   MY=f)Nc��gr#r3)�signum�frames  r�handler�7ProcessTestCase.test_communicate_eintr.<locals>.handler����rrz7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r�)	�signalrr�rcrdrrOrNr�)r&r�old_handlerrA�stream�kw�processs       r�test_communicate_eintr�&ProcessTestCase.test_communicate_eintr�s���	��m�m�F�N�N�G�<������
�
�v�~�~�{�C�����8�9��+�F��*�/�/�*�B��!�!�$�-�"�-���#�#�%�.�-�+�-�-�s�B7�7
C	�/proc/%d/fdzLinux specificc��S[R"5-n[R"U5nUR[5 [[[R[R[RS9 SSS5 [R"U5nURX#5 g!,(df   N6=f)z;Test for the fork() failure fd leak reported in issue16327.rrJN)
r�getpid�listdirror;r>rrrOre)r&�fd_directory�fds_before_popen�fds_after_exceptions    r�!test_failed_child_execute_fd_leak�1ProcessTestCase.test_failed_child_execute_fd_leak�s��%�r�y�y�{�2���:�:�l�3��
�
�
�1�
2�#�#�:�?�?�%�?�?�:�?�?�
D�3�!�j�j��6�����)�?�3�
2�s�;B/�/
B=z+behavior currently not supported on Windowsc���UR[5n[R"/SQ5 SSS5 UR	WR
RS5 g!,(df   N5=f)N)�/opt/nonexistent_binary�with�somerAr))rorPrrbrer��filenamer�s  r�%test_file_not_found_includes_filename�5ProcessTestCase.test_file_not_found_includes_filename�sI��
�
�
�0�
1�Q��O�O�O�P�2�������-�-�/H�I�2�
1�s�A�
A,c���UR[5n[R"SS/SS9 SSS5 UR	WR
RS5 g!,(df   N5=f)N�exit�0z/some/nonexistent/directoryr@)rorPrrNrer�r,r�s  r� test_file_not_found_with_bad_cwd�0ProcessTestCase.test_file_not_found_with_bad_cwd�sQ��
�
�
�0�
1�Q����f�c�]�0M�N�2�������-�-�/L�M�2�
1�s�A�
A+c���UR[R[[R
5 UR[R[[R
5 gr#)rPrrN�bytes�types�GenericAlias�CompletedProcessrwr%s r�test_class_getitems�#ProcessTestCase.test_class_getitems�sD�����j�.�.�u�5�u�7I�7I�J����j�9�9�#�>��@R�@R�Sr�_winapizneed subprocess._winapic���[R"[5nU [RR[RS[RRS9nUnURS5 URURS5 SUlSSS5 URUR5S5 SSS5 g!,(df   N7=f!,(df   g=f)N�WaitForSingleObject��return_valuertr)
rrNrrrrr;�
WAIT_OBJECT_0r,�assert_called_once_with�_handlerre)r&r�r�	mock_waits    r�test_wait_negative_timeout�*ProcessTestCase.test_wait_negative_timeout�s�������0��
��J�J�%�%��"�"�%�'�/�/�=�=�&�?�E��)��	�	�"�
��1�1�$�,�,��B�"&����

���T�Y�Y�[�!�,��T�
����T�s$�AC�%5C�(C�
C	�C�
C*c	�z�[R"[RSS/[R[R[RSS9nSSS3nURUSS	9 URSS9upEURURSSWSW3S9 URURS5US9 URSU5 S
S
S
5 g
![Ra
nS
nAN�S
nAff=f![RanURS
5 S
nAN�S
nAff=f!,(df   g
=f)z4GH-141473 regression test; the stdin pipe must closez-uczKimport sys
while c := sys.stdin.read(512):
    sys.stdout.write(c)
print()
T)rKrLrMr��spama################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################�beansr)r�rnNr{rmz_communicate() hung waiting on child process that should have seen its stdin pipe close and exitzSTDERR:
z	
STDOUT:
r)
rrNrcrdrOr�rprurerr=r�rv)r&r�r�r�rLrMs      r�)test_post_timeout_communicate_sends_input�9ProcessTestCase.test_post_timeout_communicate_sends_input�s<��
�
�
�����)��!�o�o�!���!����
��
��h�Z�u�-��� � ���!��
}�!%�!1�!1�"�!1�!=���
����O�O�Q�#�F�8�;�v�h�?�
�
A�
�O�O�F�-�-�f�5�6�O�B��M�M�'�6�*�=
�
��$�,�,�
���
���,�,�
}��	�	�{�|�|��
}��1
�
�sU�D,�C�-C:�>AD,�C7�-D,�2C7�7D,�:D)�D$�D,�$D)�)D,�,
D:r3N)�r5r6r7r8rVr[rhrqryr~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrr��skipIfr*r"r%r(r.r4r<rDrGrJrUr[r_rc�base_prefix�prefixrb�	sysconfig�is_python_buildrerirqrur{r�r�r�r�r�r�r�r�r�r�r�r��
skipUnlessr��hasattrr�r�r�r�r��get_config_varrr�r�r�r�rrrrrrr'r+r.r9rCrFrNrQrTr]r`rfrirlrprwr�r�r�r�r�r�r�r�r�r�r�requires_resourcer�r�r�r�r�r�r�r
r
rrrr
�isdirr!r&r-r2r9rrDrIr9r3rrrGrGws�����!�'�F� �
5�5�4�'�
'�'�(�'�'�%�5�4�!� �+�(�<�.)�+�	M�D�A�9��_�_�Y� D�E�G�F�G�
�_�_�Y� D�E�(�F�(��_�_�Y� D�E�(�F�(�
�*�=�&A�N�
K�
�_�_�Y� D�E�
E�F�
E��_�_�Y� D�E�-�F�-�$C��_�_�S�_�_��
�
�2�2�4�D�4�D��_�_�S�_�_��
�
�2�2�4�
�_�_�Y�.�.�0�:�<�4�<�4�4�*�*�
*�9�
6�	/�=�
:�	3�*�*
>�
4�>�&)�)�(�����A�7�5�.�#A�@�B�!�B�!�F����A�7�5�.�#A�@�B��B��@	0��������0�2F�G�
>�H�
>��_�_�S�\�\�W�,�:�<�
�_�_�Y�-�-�.@�A�Q�F�2�3��_�_�_�T�2�@�B�2�B�3�<�2�,�_�_�Y�-�-�.@�A�Q�F�9�:��_�_�_�T�2�@�B�
>�B�:�

>�@�6�<�������0�2F�G�
:�H�
:�*�'�/�
/�"�"�8@�&5� 6�r9�,'�2�.&� .�%F�NE�2*�
*�G�83�,>�*1"�f"�$	&�&�C�8�&�.�,J�N�
���u�%�
9�&�
9�'-�R�:2"�h	K�1�(	$�.�"$�������3�2�4�
�����V�,�+�-�
�����Y�/�.�0�&�0�-�4�&�&��������}�r�y�y�{�'B�C�)�+�@�+�@� �_�_�Y� M�N�J�O�J�
�_�_�Y� M�N�N�O�N�
T������Y�7�2�4�-�4�-� +rrGc���\rSrSrSrSrSrSrSrSr	Sr
S	rS
rSr
SrS
rSrSrSr\R("\S5S5rSrSrSrSr\R6"\S5S5rSrSrg)�RunFuncTestCasei�c�V�[RSU/n[R"U40UD6$)z4Run Python code in a subprocess using subprocess.runr�rcrdrr)r&r�rB�argvs    r�
run_python�RunFuncTestCase.run_pythons&������d�+���~�~�d�-�f�-�-rc���URS5nURURS5 UR[R
5 UR
5 SSS5 g!,(df   g=fr)rZrerrorr��check_returncode�r&�cps  r�test_returncode�RunFuncTestCase.test_returncodesQ��
�_�_�7�
8���������+�
�
�
�z�<�<�
=����!�>�
=�
=�s�
A'�'
A5c���UR[R5nURSSS9 SSS5 UR	WR
RS5 g!,(df   N5=f)Nr_Tr�r`)rorr�rZrer�rr�s  r�
test_check�RunFuncTestCase.test_checksQ��
�
�
�z�<�<�
=���O�O�6�d�O�C�>�������/�/��4�>�
=�s�A � 
A.c�n�[R"[SS9nURURS5 g)NTr�r)rrrrerr^s  r�test_check_zero�RunFuncTestCase.test_check_zeros&��
�^�^�O�4�
8���������*rc��UR[R5 URSSS9 SSS5 g!,(df   g=f)Nrkr�rm)rorrprZr%s r�test_timeout�RunFuncTestCase.test_timeouts5��
�
�
�z�8�8�
9��O�O�.��O�?�:�
9�
9�s	�:�
Ac�x�URS[RS9nURSUR5 g)Nr�r�r��rZrrOrvrLr^s  r�test_capture_stdout�#RunFuncTestCase.test_capture_stdouts*��
�_�_�_�Z�_�_�_�
E���
�
�g�r�y�y�)rc�x�URS[RS9nURSUR5 g)Nr�r�r�)rZrrOrvrMr^s  r�test_capture_stderr�#RunFuncTestCase.test_capture_stderr#s1��
�_�_�C�$.�O�O��5���
�
�g�r�y�y�)rc��[R"5nURUR5 UR	S5 URS5 UR
SU[RS9nURSUR5 g)Nr�rr�rr�)r�r�r�rSr�r�rZrrOrvrL)r&r�r_s   rr��+RunFuncTestCase.test_check_output_stdin_arg(sj��
�
#�
#�
%��������!�
�����
����
�
�_�_�I������2��	
�
�
�g�r�y�y�)rc�z�URSS[RS9nURSUR5 g)Nr�r�)r�rLr�rlr^s  rr��+RunFuncTestCase.test_check_output_input_arg3s5��
�_�_�H��j�o�o��7��	
�
�
�g�r�y�y�)rc���[R"5nURUR5 UR	S5 URS5 UR
[SS9nURSUSS9nSSS5 URSWRRS5 URS	URRS5 g!,(df   Na=f)
Nr�rr�rr�r�r�rKr�)r�r�r�rSr�r�ror�rZrvr�rAr�s    rr��6RunFuncTestCase.test_check_output_stdin_with_input_arg:s���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�K��M�PQ��_�_�%?�+-�W�%�>�F�M�	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�M�M�s�'C�
C"c��UR[R5nURSS[RS9nSSS5 g!,(df   g=f)Nr�rl)rnrL)rorrprZrO)r&r�r_s   rr��)RunFuncTestCase.test_check_output_timeoutGsC��
�
�
�z�8�8�
9�Q����3��
���!�9�B�:�
9�
9�s� A	�	
Ac��[RR5nSUS'URSUS9nUR	UR
S5 g)Nr�r�zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r��!)rr�r�rZrer)r&r�r_s   r�test_run_kwargs�RunFuncTestCase.test_run_kwargsMsM�������"��"��w��
�_�_�M�!'��)��	
�������+rc��[(aSOSn[R"U5nUcURUS35 [	U5n[
R"U[
RS9nURURS5 UR[5 [
R"U[
RSS9 SSS5 g!,(df   g=f)Nztree.comrz required for this testr�rT)rLr!)r*rrr�r
rrr�rerror�)r&�progr
�ress    r�test_run_with_pathlike_path�+RunFuncTestCase.test_run_with_pathlike_pathUs���'�Y�z�D���|�|�D�!���<��M�M�T�F�"9�:�;���~���n�n�T�*�*<�*<�=���������+�
�
�
�y�
)��N�N�4�
�(:�(:�$�G�*�
)�
)�s�%C
�

Cc��[R"[R5nUSS/n[R
"U5nUR
URS5 g)Nrsimport sys; sys.exit(57)�9)rrrcrdrrrer�r&r
rAr�s    r�&test_run_with_bytes_path_and_arguments�6RunFuncTestCase.test_run_with_bytes_path_and_argumentscsC���{�{�3�>�>�*���d�7�8���n�n�T�"���������,rc��[[R5nUSS/n[R"U5nURURS5 g)Nrzimport sys; sys.exit(57)r�)r
rcrdrrrerr�s    r�)test_run_with_pathlike_path_and_arguments�9RunFuncTestCase.test_run_with_pathlike_path_and_argumentsjs?������'���d�6�7���n�n�T�"���������,rz#Maybe test trigger a leak on Ubuntuc�T�[RSS/n[R"U0S9 g)Nrrr�rX)r&rAs  r�test_run_with_an_empty_env�*RunFuncTestCase.test_run_with_an_empty_envqs$������f�-��	���t��$rc��URSSS9nURSUR5 URSUR5 g)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')T��capture_outputr�sFLUFL)rZrvrLrMr^s  r�test_capture_output�#RunFuncTestCase.test_capture_outputysE��
�_�_�:�-1��2��	
�
�
�g�r�y�y�)��
�
�h��	�	�*rc��UR[SS9 URS[RS9 SSS5 g!,(df   g=f)Nz"STDOUT can only be used for stderrrr�r�)ror�rZrr�r%s r�test_stdout_stdout�"RunFuncTestCase.test_stdout_stdout�sG��
�
�
�z�9��<��O�O�6�#-�#4�#4�
�
6�<�<�<�s	�=�
Ac��[R"5nURUR5 UR	[
SS9nUR
SSUS9nSSS5 URSWRRS5 URSURRS5 g!,(df   Na=f)	NzAExpected ValueError when stdout and capture_output args supplied.rr�T)r�rLrLrr��
r�r�r�rSror�rZrvr�rAr�s    r�#test_stdout_with_capture_output_arg�3RunFuncTestCase.test_stdout_with_capture_output_arg����
�
#�
#�
%��������!�
�
�
�z�"��$�'(��_�_�%?�59�"�%�F�F�$�
	
�
�
�h���� 0� 0�� 3�4��
�
�&����(8�(8��(;�<�
$�$���B2�2
Cc��[R"5nURUR5 UR	[
SS9nUR
SSUS9nSSS5 URSWRRS5 URSURRS5 g!,(df   Na=f)	NzAExpected ValueError when stderr and capture_output args supplied.rr�T)r�rMrMrr�r�r�s    r�#test_stderr_with_capture_output_arg�3RunFuncTestCase.test_stderr_with_capture_output_arg�r�r�z)requires posix like 'sleep' shell commandc�F�[R"5n[R"SSSSS9 UR	S5 URWU-
SSWS	3S
9 g![R
a4n[R"5n[R"5nSnAN\SnAff=f)zJOutput capturing after a timeout mustn't hang forever on open filehandles.zsleep 3Trl)r!rnr�zTimeoutExpired not raised.Ng�?z/TimeoutExpired was delayed! Bad traceback:
```
z```r)	r3r4rrrurp�	traceback�
format_excr5)r&�before_secsr��
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_output�>RunFuncTestCase.test_run_with_shell_timeout_and_capture_output�s����n�n�&��	4��N�N�9�D�#�*.�
0�
�I�I�2�3����
�[�0�#�O�!�(�#�'�	�	(���(�(�	,����)�J��)�)�+�F��	,�s�A�B �,*B�B c�v�[R"S5n[R"[R
SSU/SS9nURR5nUR[U5SU5 URUSRS55 URUS	RS
55 g)Nz�            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingrTr�r�rs<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )rdrerrrcrdrM�
splitlinesrer"r=r�)r&r�r_�liness    r�test_encoding_warning�%RunFuncTestCase.test_encoding_warning�s������ ���
�^�^�S�^�^�-F��d�S�+/�1���	�	�$�$�&������U��Q��.�����a��+�+�,L�M�N�����a��+�+�,L�M�Nrr3N)r5r6r7r8rZr`rcrfrirmrpr�r�r�r�r|r�r�r�r�rPr*r�r�r�r�r�rKr�r�r9r3rrrVrV�s���.�
"�5�
+�
@�*�
*�
	*�*�4�9�,�H�-�-�����$I�J�%�K�%�+�6�
=�
=� �_�_�Y� K�L�
(�M�
(�OrrVc��SH)n[(dM[R"U5 Us $ [R"S5e![a MPf=f)N)�staff�nogroup�grp�nobody�	nfsnobodyz?No identified group name to use for this test on this platform.)r��getgrnam�KeyErrorr�r�)�
name_groups r�_get_test_grp_namer��sS��H�
��3�
����Z�(���
I���� a�b�b��	�
��
�s�A�
A�AzPOSIX specific testsc�b	^�\rSrSrU4SjrSrSrSrSr"SS\	R5r\R"S	5S
5r\R"S	5S5r\R""\R&R)S5(+S
5S5rSr\R."\"\S5=(a	 \"\S5S5S5r\R."\"\S5S5S5r\R""\"\S5S5S5r\R."\"\S5S5S5r\R""\"\S5S5S5r\R."\"\S5S5S 5r\R."\"\S5S5S!5rS"r S#r!\R""\"=(d \"\S$5(+S%5S&5r#S'r$S(r%S)r&S*r'S+r(S,r)"S-S.\	R5r*\R""\R&R)S/5(+S05S15r+S2r,\R""\-R\S3:HS45S55r/S6r0S7r1S8r2S9r3S:r4S;r5S<r6\R""\-R\RoS=5S>5S?5r8S@r9SAr:SBr;SCr<SDr=SEr>SFr?SGr@SHrASIrBSJrCSKrDSLrESMrFSNrGSOrHSPrISQrJSRrKSSrLSTrMSUrNSVrOSWrPSXrQSYrRSZrSS[rT\R""\-R\RoS\5=(a9 \R�"S]5R�\R�"S^5R�:HS_5S`5rW\XR�"SaSb5Sc5rZSdr[Ser\Sfr]Sgr^Shr_Sir`SjraSkrbSlrcSmrd\XR�Sn5rf\XR�So5rgSprhSqriSrrjSsrk\R."\lStL=(a	 \"\lSu5Sv5Sw5rmSxrnSyroSzrpS{rq\R""\rR�"S|5(+S}5\R"S	5\R"S~SS�9S�555rt\R""\rR�"S|5(+S}5\R""\-R\S�:gS�5\R"S~SS�9S�555ruS�rvU=rw$)��POSIXProcessTestCasei�c�0>�[TU]5 SUlg)Nz/_this/pa.th/does/not/exist)�superr'�_nonexistent_dir�r&�	__class__s �rr'�POSIXProcessTestCase.setUp�s���
��
�� =��rc��[R"UR5 URSUR-5 W$![a
nUnSnAU$SnAff=f)Nz,chdir to nonexistent directory %s succeeded.)r�chdirr�rur�)r&rx�desired_exceptions   r�_get_chdir_exception�)POSIXProcessTestCase._get_chdir_exception�s`��		-��H�H�T�*�*�+�
�I�I�D��+�+�,�
-� � ���	"�!"��!� ��	"�s� A�
A�A�Ac��UR5n[R"[RSS/UR
S9nUR
SU-5 g![a|nURURUR5 URURUR5 URURUR5 SnAgSnAff=f)z;Test error in the child raised in the parent for a bad cwd.rrr@�Expected OSError: %sN�r�rrNrcrdr�rur�rer��strerrorr,�r&r�rUrxs    r�test_exception_cwd�'POSIXProcessTestCase.test_exception_cwd�s��� �5�5�7��
	B�� � �#�.�.�$��!;�%)�%:�%:�<�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E���0A�
C�!A2C�Cc��UR5n[R"[RSS/UR
S9nUR
SU-5 g![a|nURURUR5 URURUR5 URURUR5 SnAgSnAff=f)zBTest error in the child raised in the parent for a bad executable.rrrr�Nr�r�s    r�test_exception_bad_executable�2POSIXProcessTestCase.test_exception_bad_executable�s��� �5�5�7��
	B�� � �#�.�.�$��!;�,0�,A�,A�C�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E�r�c��UR5n[R"URSS/5nUR	SU-5 g![
a|nUR
URUR5 UR
URUR5 UR
URUR5 SnAgSnAff=f)z?Test error in the child raised in the parent for a bad args[0].rrr�N)
r�rrNr�rur�rer�r�r,r�s    r�test_exception_bad_args_0�.POSIXProcessTestCase.test_exception_bad_args_0s��� �5�5�7��		B�� � �$�"7�"7��r�!B�C�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E�s�#A
�

C�A2C�Cc��\rSrSrSrSrg)�&POSIXProcessTestCase.PopenNoDestructoric��gr#r3r%s r�__del__�.POSIXProcessTestCase.PopenNoDestructor.__del__rrr3N)r5r6r7r8r�r9r3rr�PopenNoDestructorr�s��	rr�zsubprocess._fork_execc��SnX!l[R"S[S9 UR	[
5 UR
S/5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)z>Test error passing done through errpipe_write in the good casec��USnSR[R5R5n[R
"USU-S-5 g)N�
z{:x}sOSError:�:r)rur��EISDIRr*rr�)rA�
errpipe_write�err_codes   r�proper_error�HPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_errorsA�� ��H�M��}�}�U�\�\�2�9�9�;�H��H�H�]�K�(�$:�T�$A�B�r�subprocess.os.waitpid��side_effect�non_existent_commandN)r�rr�ChildProcessErrorro�IsADirectoryErrorr�)r&�	fork_execr�s   r�test_exception_errpipe_normal�2POSIXProcessTestCase.test_exception_errpipe_normalsc��	�!-��
�Z�Z�/�$5�7��"�"�#4�5��&�&�(>�'?�@�6�7�7�5�5��7�7�s"�A.�A�A.�
A+	�'A.�.
A<c�z^�SmU4SjnX!l[R"S[S9 UR	[
R5nURS/5 SSS5 SSS5 UR[T5[WR55 g!,(df   NE=f!,(df   NN=f)zRTest error passing done through errpipe_write where its not
in the expected formats�ޭc�>>�USn[R"UT5 g)Nr�r)rr�)rAr��
error_datas  �r�	bad_error�GPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_error/s��� ��H�M�
�H�H�]�J�/�rr�r�r�N)r�rrr�ror�SubprocessErrorr�rvrrwr�)r&r�r�rxr�s    @r�test_exception_errpipe_bad_data�4POSIXProcessTestCase.test_exception_errpipe_bad_data*s����)�
�	�!*��
�Z�Z�/�$5�7��"�"�:�#=�#=�>�!��&�&�(>�'?�@�?�7�
	
�
�
�d�:�&��A�K�K�(8�9�?�>��7�7�s#� B,�	B�B,�
B)	�%B,�,
B:�/proc/self/statuszneed /proc/self/statusc�h�[R"SS/SS9nUR5HnURS5(dMUn O UR	S5 [R"SS/SS9nUR5HnURS5(dMUn O URWWSS	9 g)
N�catr�F)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.r)rr�r�r�r��assertNotEqual)r&�default_proc_statusr��default_sig_ign_mask�restored_proc_status�restored_sig_ign_masks      r�test_restore_signals�)POSIXProcessTestCase.test_restore_signals@s���)�5�5��+�,� %�'��(�2�2�4�D����y�)�)�'+�$��5�

�M�M�B�C�)�6�6��+�,� $� &��)�3�3�5�D����y�)�)�(,�%��6�	
���0�2G�!3�	�	4rc�"�[R"[RSS/SS9n[R
"S5n[
U5nURX#5 g![a)nUR[R:waeSnAgSnAff=f)Nrzimport os; print(os.getsid(0))T)�start_new_sessionr)rr�rcrdr�getsid�intr��PermissionErrorr��EPERM)r&r��
parent_sid�	child_sidrxs     r�test_start_new_session�+POSIXProcessTestCase.test_start_new_sessionXsy��
	7��,�,��^�^�T�+K�L�&*�,�F����1��J��F��I����
�6��
�	��w�w�%�+�+�%��&��	���&A�
B�%B	�	B�setpgid�getpgidz!no setpgid or getpgid on platformc�"�[R"[RSS/SS9n[R
"S5n[
U5nURX#5 g![a)nUR[R:waeSnAgSnAff=f)Nrzimport os; print(os.getpgid(0))r)�
process_group)rr�rcrdrrr�r�rr�r)r&r��parent_pgid�
child_pgidrxs     r�test_process_group_0�)POSIXProcessTestCase.test_process_group_0hsy��
	9��,�,��^�^�T�+L�M�"#�%�F��*�*�Q�-�K��V��J�����8��
�	��w�w�%�+�+�%��&��	�r�setreuidzno setreuid on platformc	�v�[R"5nUS:waSOSU/n[RS:waSOSn[b([R
"U5 UR
U5 UH�nSH�nURXES9 [R"[RSS	/UUS9n[U[5(a![R
"U5RnOUn[U5nUR!X�5 SSS5 M� M� UR-[.5 [R0"[2S
S9 SSS5 UR-[45 [R0"[2[R6[R8SS
9 SSS5 [c<Ub8UR-[.5 [R0"[2US9 SSS5 ggg![a SnGN�f=f!["atn	U	R$[$R&:Xa0UR!U	R([R5 Sn	A	GNKUR+U	R(5 Sn	A	GNlSn	A	ff=f!,(df   GM=f!,(df   GNO=f!,(df   GN=f!,(df   g=f)N���darwinr��unknownr<)�user�	close_fdsrzimport os; print(os.getuid())rt�r�)r-r�r)r�geteuidrcr��pwd�getpwnamr�r��subTestrr�rd�
isinstancerw�pw_uidr�rerr��EACCESr,rror�r}r�
OverflowErrorrNr�)
r&�uid�
test_users�name_uidrrr��user_uid�
child_userrxs
          r�	test_user�POSIXProcessTestCase.test_userzs���j�j�l��"�e�|�e���<�
�"�|�|�x�7�8�Y���?�
 ����X�&��!�!�(�+�
�D�*�	��\�\�t�\�A�?�!+�!8�!8�!$����!@�!B�%)�*3�	"5��&�d�C�0�0�'*�|�|�D�'9�'@�'@�H�'+�H�%(��[�
��(�(��>�%B�A�+��.�
�
�z�
*��!�!�/��;�+��
�
�}�
-��!�!�/�&(�i�i�R�Z�Z�e�
M�.��;�8�/��"�"�:�.��%�%�o�H�E�/�.�0�;��E�
 ���
 ��+�:��7�7�e�l�l�2� �,�,�Q�Z�Z����H�H� �-�-�a�j�j�9�9��	:��B�A��(+�
*��.�
-��
/�.�sz�'G�I3�'G2�+AI3�$J�8J�:J*�G/�.G/�2
I0	�<AI+	�I3�
I+	�%I3�+I0	�0I3�3
J�
J�
J'�*
J8z setreuid() available on platformc��UR[5 [R"[SS9 SSS5 g!,(df   g=f)N�r�ror�rr}rr%s r�test_user_error�$POSIXProcessTestCase.test_user_error�s,��
�
�
�z�
*��!�!�/��>�+�
*�
*��	�9�
A�setregidzno setregid() on platformc	�b�[R"5nUS:waSOS/n[5n[bUR	U5 X!/-H�nSH�nURXES9 [R"[RSS/UUS9n[U[5(a![R"U5RnOUn[U5nURX�5 SSS5 M� M� UR'[(5 [R*"[,SS9 SSS5 UR'[.5 [R*"[,[R0[R2S	S
9 SSS5 [c8UR'[(5 [R*"[,US9 SSS5 gg![ a&n	UR#U	R$5 Sn	A	GNSn	A	ff=f!,(df   GM�=f!,(df   N�=f!,(df   N�=f!,(df   g=f)Nrrr<)�grouprrzimport os; print(os.getgid())rt�r0r)r-r�r0)r�getegidr�r�r�rrr�rcrdrrwr��gr_gidr�rerrr,ror�r}rr rNr�)
r&�gid�
group_listr�r0rr��	group_gid�child_grouprxs
          r�
test_group�POSIXProcessTestCase.test_group�s����j�j�l��"�e�|�e��7�
�'�)�
��?����j�)��%�'�E�*�	��\�\��\�C�A�!+�!8�!8�!$����!@�!B�&+�*3�	"5��&�e�S�1�1�(+���U�(;�(B�(B�I�(-�I�&)�&�k���(�(��@�!D�C�+�(�,�
�
�z�
*��!�!�/��<�+��
�
�}�
-��!�!�/�&(�i�i�R�Z�Z�u�
N�.��;��"�"�:�.��%�%�o�Z�H�/�.���'+�6��)�)�!�*�*�5�5��6��D�C��&+�
*��.�
-��
/�.�s[�G+�!'F8�AG+�G>�88H�H �8
G(	�G#	�G+�#G(	�(G+�+
G;�>
H�
H� 
H.z setregid() available on platformc��UR[5 [R"[SS9 SSS5 g!,(df   g=f)Nr)r1r*r%s r�test_group_error�%POSIXProcessTestCase.test_group_error�s,��
�
�
�z�
*��!�!�/��?�+�
*�
*�r-�	setgroupszno setgroups() on platformc�b�[R"5nUS:waSOS/nURXS9 g)Nrr�r4r5)rr2�_test_extra_groups_impl)r&r4r5s   r�test_extra_groups�&POSIXProcessTestCase.test_extra_groups�s.���j�j�l��"�e�|�e��7�
��$�$��$�Drc�J�UR[R"5/S9 g)Nr?)r@rr2r%s r�test_extra_groups_empty_list�1POSIXProcessTestCase.test_extra_groups_empty_list�s���$�$�����"�$�Erc��[5n[bURU5 [R"[
RSS/US9n[R"5n[R"U5n[bHUVs/sH:n[U[5(a [R"U5ROUPM< nnOUnUR[!U5[!U55 [c9UR+[,5 [R."[0U/S9 SSS5 ggs snf!["a6n	UR%U	R&5 UR)S5 Sn	A	N�Sn	A	ff=f!,(df   g=f)Nrz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)��extra_groupsz-setgroup() EPERM; this test may require root.)r�r�r�rr�rcrdr�	getgroups�json�loadsrrwr�r3re�setrrr,r�ror�r}r)
r&r4r5r�r��
parent_groups�child_groups�g�desired_gidsrxs
          rr@�,POSIXProcessTestCase._test_extra_groups_impl�sF��'�)�
��?����j�)�	C��,�,��^�^�T�R�T�!+�-�F��L�L�N�M��:�:�f�-�L���)3� 5�)3�A�;E�Q��:L�:L����Q�� 6� 6�RS� S�)3�� 5�� *�����S��.��L�0A�B��;��"�"�:�.��%�%�o�4>�<�A�/�.��� 5���	K����a�j�j�)��M�M�I�J�J��	K�� /�.�s*�&D0�AD+�E3�0
E0�:,E+�+E0�3
Fc�d�UR[5 [R"[S/S9 SSS5 UR[5 [R"[[
R[
RS/S9 SSS5 g!,(df   Ne=f!,(df   g=f)NrtrGr)r-r�rH)ror�rr}rrrNr�r%s r�&test_extra_groups_invalid_gid_t_values�;POSIXProcessTestCase.test_extra_groups_invalid_gid_t_values	ss��
�
�
�z�
*��!�!�/���E�+��
�
�z�
*��!�!�/�&(�i�i�R�Z�Z�05�w�
8�+�
*�+�
*��+�
*�s�B�9B!�
B�!
B/�umaskzPOSIX umask() is not available.c	���Sn[R"5n[RR	US5n[
R"[RSSU<S3/SS9 [R"U5RS-nSnURXC[U5S	[U53S
9 Ub[R"U5 gg!Ub[R"U5 ff=f)NrHrzopen(z, 'w').close()�+)rUi�i�z != r)r�r�rr
rrr}rcrd�stat�st_modere�octrr�)r&r��namerY�
expected_modes     r�
test_umask�POSIXProcessTestCase.test_umask	s�����	&��%�%�'�F��7�7�<�<���0�D�
�!�!��^�^�T�U�4�(�.�+I�J��
!�
�g�g�d�m�+�+�e�3�G�!�M����]�$'�
�$6�#7�t�C��L�>�!J�
�
L��!��
�
�f�%�"��v�!��
�
�f�%�"�s�B,C�C'c�&�[R"5 [R"[R
SS/5nUR
5 SSS5 URWR*[R5 g!,(df   N:=f)Nrzimport os; os.abort())rr�rrNrcrdr,rerr�SIGABRTrTs  r�test_run_abort�#POSIXProcessTestCase.test_run_abort+	sa��
�
(�
(�
*�� � �#�.�.�$�"9�";�<�A�
�F�F�H�+�	
���!�,�,�����7�	+�
*�s�8B�
Bc�.�[R"[[R5*S5n[U5nUR
SUR55 UR
SU5 UR
[[R5U5 g)N�fake cmdr�SIG)rr�r�rr`rwrv�lower�r&r��error_strings   r�"test_CalledProcessError_str_signal�7POSIXProcessTestCase.test_CalledProcessError_str_signal3	si���+�+�S����-@�,@�*�M���3�x��	
�
�
�h�� 2� 2� 4�5�	
�
�
�e�\�*��
�
�c�&�.�.�)�<�8rc�l�[R"SS5n[U5nURSU5 g)Ni�Ki�rdzunknown signal 9876543.�rr�rwrvrgs   r�*test_CalledProcessError_str_unknown_signal�?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signal>	s,���+�+�H�j�A���3�x���
�
�/��>rc�l�[R"SS5n[U5nURSU5 g)Nr�rdznon-zero exit status 2.rlrgs   r�$test_CalledProcessError_str_non_zero�9POSIXProcessTestCase.test_CalledProcessError_str_non_zeroC	s,���+�+�A�z�:���3�x���
�
�/��>rc��[R"[RSS/[RSS9nU URURR5S5 SSS5 g!,(df   g=f)Nrr�c�0�[R"SS5$)Nr��apple)r�putenvr3rr�<lambda>�3POSIXProcessTestCase.test_preexec.<locals>.<lambda>O	s���	�	�'�7�0Kr)rL�
preexec_fn�applerzrTs  r�test_preexec�!POSIXProcessTestCase.test_preexecH	s^��
���c�n�n�d�E�F�%/�O�O�(K�	
M��
����Q�X�X�]�]�_�h�7��Q�Q�s�+A-�-
A;c�^�Sn[R"[RSS/US9nUR	S5 g![R
a*nUR
[RS5 SnAgSnAf[a)nURSURS5 SnAgSnAff=f)	Nc��[S5e)Nz'What if two swallows carried a coconut?�r�r3rr�raise_it�=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_itT	s���F�G�Grrr�rxzEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fn�coconutr)rrNrcrdrur�r=�
_fork_execr�rvrA)r&rrUrxs    r�test_preexec_exception�+POSIXProcessTestCase.test_preexec_exceptionS	s���	H�	0�� � �#�.�.�$��!;�,4�6�A�
�I�I�/�
0���)�)�	A��O�O��)�)�?�
A�
A���	0��M�M�)�Q�V�V�A�Y�/�/��	0�s!�&=�B,� A6�6
B,�B'�'B,c�$�\rSrSrSrSrSrSrg)�+POSIXProcessTestCase._TestExecuteChildPopenic	z3Used to test behavior at the end of _execute_child.c�X�Xl[RR"U/UQ70UD6 gr#)�	_testcaserrNr�)r&�testcaserArBs    rr��4POSIXProcessTestCase._TestExecuteChildPopen.__init__e	s%��%�N����%�%�d�<�T�<�V�<rc
�.�[RR"U/UQ70UD6 [S5Vs/sH(n[R
"S[R5PM* nnUHhnURRXPRR5URR5URR54SS9 Mj UHn[R"U5 M gs snf!UHn[R"U5 M f=f![S5Vs/sH(n[R
"S[R5PM* Os snfnnUHhnURRXPRR5URR5URR54SS9 Mj UHn[R"U5 M f!UHn[R"U5 M f=f=f)N��	/dev/zeroz!At least one fd was closed early.r)rrNrCr rr��O_RDONLYr�r�rKrmrLrMrS)r&rArBr��devzero_fdsr�s      rrC�:POSIXProcessTestCase._TestExecuteChildPopen._execute_childi	s���
%�� � �/�/��F�t�F�v�F�).�a��2�(0�1� "�w�w�{�B�K�K�@�(0��2�%�)�����2�2� "�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�*�*�������*��2��*�������*��).�a��2�(0�1� "�w�w�{�B�K�K�@�(0��2��2�%�)�����2�2� "�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�*�*�������*��k�������*�sB�$D�/C3�%A.C8�8!D�H�*/E�H�"A.G0� H�0!H�H)r�N)r5r6r7r8rEr�rCr9r3rr�_TestExecuteChildPopenr�c	s��A�	=�	%rr�r�z/dev/zero required.c
��SnUR[R5 URU[[R
[R
[R
US9 SSS5 g!,(df   g=f)z6Issue16140: Don't double close pipes on preexec error.c�.�[R"S5e)Nz-force the _execute_child() errpipe_data path.)rr�r3rrr�WPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�	s���,�,�C�E�
Er)rKrLrMrxN)rorr�r�rrO)r&rs  r�0test_preexec_errpipe_does_not_double_close_pipes�EPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes|	sY��	E��
�
�z�9�9�
:��'�'��o�(�o�o�j�o�o�)���8�
(�
E�;�
:�
:�s�AA/�/
A=c���[R"5n[R"5 UR[R"55 [R
"[RSS/SS9 UR[R"5S5 [R"5 UR[R"55 [R
"[RSS/SS9 UR[R"5S5 U(d[R"5 gg!U(d[R"5 ff=f)Nrrc��gr#r3r3rrrv�EPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>�	���trr�z#Popen enabled gc when it shouldn't.c��gr#r3r3rrrvr��	r�rzPopen left gc disabled.)
�gc�	isenabled�disabler.rrbrcrd�enabler=)r&�enableds  r�test_preexec_gc_module_failure�3POSIXProcessTestCase.test_preexec_gc_module_failure�	s����,�,�.��	��J�J�L����R�\�\�^�,��O�O�S�^�^�T�2�6�'3�
5����R�\�\�^�B�
D�
�I�I�K��O�O�B�L�L�N�+��O�O�S�^�^�T�2�6�'3�
5��O�O�B�L�L�N�,E�F���
�
����7��
�
���s�D
D?�?Erz!setrlimit() seems to fail on OS Xc�N�SSKJnJnJn W"W5nUupgW"USU45 UR
X#U5 [R"[RSS/SS9 URS5 g![anURU5 SnAN�SnAff=f![a gf=f)Nr)r}r�RLIMIT_NPROCrrc��gr#r3r3rrrv�@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>�	r�rr�z.RLIMIT_NPROC had no effect; probably superuser)r|r}rr�r�r�r�rrbrcrd�BlockingIOError)r&r}rr�r��limitsr�r�s        r�test_preexec_fork_failure�.POSIXProcessTestCase.test_preexec_fork_failure�	s���
	�C�C��<�(���	���,��D�	�*����	��8�	L��O�O�S�^�^�T�2�6�'3�
5�
�M�M�J�K���	��M�M�#����	���	��	�s(�
A/�'B�/
B�9B�B�
B$�#B$c���[R"5up[USSS9nURS[R
-5 URS[R-5 SSS5 [R"US5 [R"U5nUR5 [R"U5 URURS5 g!,(df   N~=f�N�wrs)r�z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i�r`)r�r�r�r�r�
unix_shellrcrdr�chmodrrNr,r�rer)r&r��fname�fobjrUs     r�test_args_string�%POSIXProcessTestCase.test_args_string�	s����$�$�&�	��
�"�c�"3�
4���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�5�	���������U�#��	����
�	�	�%��������r�*�5�
4�s�AC � 
C.c���UR[[R[R
SS/SS9 UR[[R[R
SS/SS9 g)Nrr_r`��startupinfo��
creationflags�ror�rrbrcrdr%s rr��&POSIXProcessTestCase.test_invalid_args�	sb�����*�j�o�o��>�>�4�5�7�&(�	�	*�	
���*�j�o�o��>�>�4�5�7�(*�	�	,rc�@�[RR5nSUS'[R"S/S[R
US9nU UR
URR5RS5S5 SSS5 g!,(df   g=f�Nrtr�zecho $FRUITr��r!rLr�s 	
ry�
rr�r�rrNrOrerLr8r��r&r�rUs   r�test_shell_sequence�(POSIXProcessTestCase.test_shell_sequence�	so�������"��!��w�����m�_�A�$.�O�O�!'�
)������Q�X�X�]�]�_�2�2�<�@�(�K��Q�Q�s�:B�
Bc�>�[RR5nSUS'[R"SS[R
US9nU UR
URR5RS5S5 SSS5 g!,(df   g=fr�r�r�s   r�test_shell_string�&POSIXProcessTestCase.test_shell_string�	sm�������"��!��w�����]�!�$.�O�O�!'�
)������Q�X�X�]�]�_�2�2�<�@�(�K��Q�Q�s�:B�
Bc��[R"5up[USSS9nURS[R
-5 URS[R-5 SSS5 [R"US5 [R"U5n[R"U5 URUS5 g!,(df   Nd=fr�)r�r�r�r�rr�rcrdrr�rrbr�re)r&r�r�r�rgs     r�test_call_string�%POSIXProcessTestCase.test_call_string�	s����$�$�&�	��
�"�c�"3�
4���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�5�	������
�_�_�U�
#��
�	�	�%������R� �5�
4�s�AC�
Cc	���/nSHbnSHYn[RRX#5n[RRU5(dMHUR	U5 M[ Md U(dURS5 Sn[RRU5(a5[RR
U5(dUR	U5 UHun[R"SUS[RS9nU URURR5R5[US55 SSS5 Mw g!,(df   M�=f)	N)z/binz	/usr/bin/z/usr/local/bin)�bash�kshz"bash or ksh required for this testz/bin/shzecho $0T)rdr!rLr�)rr
r�isfiler�r��islinkrrNrOrerLr8r�r5)r&�shellsrMr[�shrUs      r�test_specific_shell�(POSIXProcessTestCase.test_specific_shell�	s�����=�F�'���W�W�\�\�&�/���7�7�>�>�"�%�%��M�M�"�%�(�>�
��M�M�>�?�
��
�7�7�>�>�"���b�g�g�n�n�R�&8�&8��M�M�"���B�� � ��r��(2���9�A��� � �������!6�!6�!8�%��G�:L�M������s
�
AE�
E)	c��[R"[R[R5n[R"[
RSS/S[R[R[RS9n[R"[RU5 URRS5 [XA5"U6 U$![R"[RU5 f=f)Nrz�if 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 T�rrKrLrMr�)r�SIGINT�default_int_handlerrrNrcrdrOrLr8r)r&�methodrArrUs     r�
_kill_process�"POSIXProcessTestCase._kill_process
s���
�m�m�F�M�M�6�3M�3M�N��	6�� � �#�.�.�$�9%�"&�,0�'1���(2���(2���	9�A�
�M�M�&�-�-��5�	
���
�
�a�����D�!����
�M�M�&�-�-��5�s�AC�'C?)�netbsd�openbsdz"Due to known OS bug (issue #16762)c�H�[R"[RSS/S[R[R[RS9nUR
R
S5 [R"S5 [X15"U6 UR5 g)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Tr�r�)rrNrcrdrOrLr8r3r�rr�)r&r�rArUs    r�_kill_dead_process�'POSIXProcessTestCase._kill_dead_process
ss��

���c�n�n�d�5!�"�
(,�#-�?�?�$.�O�O�$.�O�O�
5��	
���
�
�a���
�
�1�
����D�!�	�
�
�rc���URS[R5nUR5up#UR	SU5 URUR
5S5 g)N�send_signalsKeyboardInterruptr)r�rr�r�rvr�r,�r&rUr�rMs    r�test_send_signal�%POSIXProcessTestCase.test_send_signal3
sJ�����}�f�m�m�<���M�M�O�	���
�
�*�F�3����A�F�F�H�a�(rc���URS5nUR5up#URUS5 URUR5[R
*5 g)Nr�r)r�r�rer,r�SIGKILLr�s    r�	test_kill�POSIXProcessTestCase.test_kill9
sK�����v�&���M�M�O�	�������%��������F�N�N�?�3rc���URS5nUR5up#URUS5 URUR5[R
*5 g)N�	terminater)r�r�rer,r�SIGTERMr�s    r�test_terminate�#POSIXProcessTestCase.test_terminate?
sK�����{�+���M�M�O�	�������%��������F�N�N�?�3rc�D�URS[R5 g�Nr�)r�rr�r%s r�test_send_signal_dead�*POSIXProcessTestCase.test_send_signal_deadE
s�����
�v�}�}�=rc�&�URS5 g�Nr��r�r%s r�test_kill_dead�#POSIXProcessTestCase.test_kill_deadI
s������'rc�&�URS5 g�Nr�r�r%s r�test_terminate_dead�(POSIXProcessTestCase.test_terminate_deadM
s������,rc��/nUHBn[R"U5n[R"U5nURX5U45 MD U$r#)r�get_inheritable�dupr�)r&�save_fdsr�r��inheritable�saveds      r�	_save_fds�POSIXProcessTestCase._save_fdsQ
sF�����B��,�,�R�0�K��F�F�2�J�E��J�J��;�/�0���
rc�r�UH1up#n[R"X2US9 [R"U5 M3 g)N)r�)r�dup2rS)r&r�r�r�r�s     r�_restore_fds�!POSIXProcessTestCase._restore_fdsY
s*��&)�"�B�{��G�G�E�;�7��H�H�U�O�'*rc���SnURU5nUHupEnUS:XdMUn O UHn[R"U5 M [R"[
RSS/U[R[RS9R5upxURUS5 URUS5 URU5 g!URU5 f=f)Nrrr�rJryry)r�rrSrrNrcrdrOr�rer)	r&r�rK�	saved_fdsr�r�r�r�r�s	         r�check_close_std_fds�(POSIXProcessTestCase.check_close_std_fds^
s������N�N�3�'�	�&/�"�B�{��Q�w����'0�	)���������!�'�'�����;�)<�
#�(�o�o�(�o�o�/�0;�{�}�
�C�
���S�(�+����S�)�,����i�(��D���i�(�s�BC�C'c�(�URS/5 gr|�rr%s r�test_close_fd_0�$POSIXProcessTestCase.test_close_fd_0w
���� � �!��%rc�(�URS/5 g�Nr�r
r%s r�test_close_fd_1�$POSIXProcessTestCase.test_close_fd_1z
r
rc�(�URS/5 g)Nr�r
r%s r�test_close_fd_2�$POSIXProcessTestCase.test_close_fd_2}
r
rc�*�URSS/5 g)Nrr�r
r%s r�test_close_fds_0_1�'POSIXProcessTestCase.test_close_fds_0_1�
���� � �!�Q��(rc�*�URSS/5 g)Nrr�r
r%s r�test_close_fds_0_2�'POSIXProcessTestCase.test_close_fds_0_2�
rrc�*�URSS/5 g)Nr�r�r
r%s r�test_close_fds_1_2�'POSIXProcessTestCase.test_close_fds_1_2�
rrc�*�UR/SQ5 g)N)rr�r�r
r%s r�test_close_fds_0_1_2�)POSIXProcessTestCase.test_close_fds_0_1_2�
s��	
� � ��+rc��[R"S5n[R"S5n[R"S5 [R"S5 [R"[
RSS/5R5 [R"US5 [R"US5 [R"U5 [R"U5 g![R"US5 [R"US5 [R"U5 [R"U5 f=f)z=Issue #15798: Popen should work when stdio fds are available.rr�rz*print('AssertionError:0:CLOEXEC failure.')N)	rr�rSrrNrcrdr,r)r&�	new_stdin�
new_stdouts   r�test_small_errpipe_write_fd�0POSIXProcessTestCase.test_small_errpipe_write_fd�
s����F�F�1�I�	��V�V�A�Y�
�	!��H�H�Q�K��H�H�Q�K�

����N�N�D�@�B�
C�CG�4�6�
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� ��
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� �s
�A!C*�*AEc�>�[S5Vs/sHn[R"5PM nnUVVs/sHup4UPM	 nnnUHup4[R"U5 M [R
"USS5 [R"USSS5 UR[S55n[U5Hup7[R"Xs5 M [R"[RSS/USUSUSS9nUR5 URU5 UHn[R"USS5 M [R "USS	5n	[R "USS	5R#5n
UR%U	S
5 UR%U
S5 UHn[R&"U5 M gs snfs snnf!URU5 f=f!WHn[R&"U5 M f=f)N�r��STDINrr�Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")r�rJr�	got STDIN�err)r r�r�r�unlinkr�rnr��	enumeraterrrNrcrdr,rr8r�rerS)r&r�tempsr�r��temp_fdsr�temp_fdrUr�r�s           r�test_remapping_std_fds�+POSIXProcessTestCase.test_remapping_std_fds�
s���-2�1�X�6�X���!�!�#�X��6�(	�,1�2�E�y�r��E�H�2�#�	���	�	�%� �#�
�H�H�X�a�[�(�+��H�H�X�a�[�!�Q�'����u�Q�x�0�I�
-�#,�X�#6�K�B��G�G�G�(�$7�
�$�$�c�n�n�d�N�&O�#�1�+�#�A�;�#�A�;�(�������!�!�)�,�������Q��"���'�'�(�1�+�t�,�C��'�'�(�1�+�t�,�2�2�4�C����S�,�/����S�&�)����������Q7��2��6�!�!�)�,����������s<�G�G;�G�A3G;�7A+G%�"BG;�G;�%G8�8G;�;!Hc��[S5Vs/sHn[R"5PM nnUVVs/sHupgUPM	 nnnUHupg[R"U5 M UR[S55n	[
U5Hupj[R"X�5 M [R"US5 [R"USS5 [R"[RSS/UUUS9nUR5 UHn[R"USS5 M [R"US5n[R"US5R!5n
UR#U	5 UR%US5 UR%U
S	5 UHn[R&"U5 M gs snfs snnf!UR#U	5 f=f!UHn[R&"U5 M f=f)
Nr(r)rrr*rJrr+r,)r r�r�rr-r�r.rr�rnrrNrcrdr,r8r�rrerS)r&�stdin_no�	stdout_no�	stderr_norr/r�r�r0rr1rUr�r�s              r�check_swap_fds�#POSIXProcessTestCase.check_swap_fds�
s���-2�1�X�6�X���!�!�#�X��6�(-�.��9�2�B���.�'	�"�	���	�	�%� �#����u�Q�x�0�I�
-�#,�X�#6�K�B��G�G�G�(�$7�����8�,�����1�a�(��$�$�c�n�n�d�N�&O�#�$�$�&������"�B��H�H�R��A�&�#��g�g�i��.���g�g�i��.�4�4�6���!�!�)�,����S�,�/����S�&�)����������Q7��.��B�!�!�)�,����������s/�G�G
�;G&�C.G�05G&�G#�#G&�&!Hc���URSSS5 URSSS5 URSSS5 URSSS5 URSSS5 URSSS5 g)Nrr�r�)r8r%s r�
test_swap_fds�"POSIXProcessTestCase.test_swap_fdssn�����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$rc��UR[S55nUHFn[R"5n[R
"UR
5U5 SSS5 MH [[S55[U5-
R5n[R"U5 /SQn0n[X5HupIXHXy'M
 [R"S5n
[[S55[U5-
R5n[R"[R SU
[#U5/40UD6nUR%US5 [X5H�upI[R&"US[R(5 [R*"US5n
[-[/[0U
R3S555n[R"SUS	US
USUSU	S
35nUR%U	/X�5 M� UR5U5 g!,(df   GM
=f!UR5U5 f=f)Nr(rJz�
                import os, sys
                skipped_fd = int(sys.argv[1])
                for fd in range(3):
                    if fd != skipped_fd:
                        os.write(fd, str(fd).encode('ascii'))
            rrrr�z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )r�r r�r�rrrmrLr�rS�ziprdrerrbrcrdrwrern�SEEK_SETr8r��mapr�r9r)r&�from_fds�to_fdsr�from_fd�f�fd_to_close�	arg_namesrB�to_fdr��
skipped_fdrg�
read_bytes�read_fdsrs                r�#_check_swap_std_fds_with_one_closed�8POSIXProcessTestCase._check_swap_std_fds_with_one_closeds����N�N�5��8�,�	�&	)�#���+�+�-���G�G�A�H�H�J��0�.�-�$��u�Q�x�=�3�x�=�8�=�=�?�K��H�H�[�!�5�I��F�"%�h�"7���+2�y�'�(�#8��?�?�$��D��e�A�h�-�#�f�+�5�:�:�<�J����#�.�.�$��c�*�o�!N�+�#)�+�B����R��#�"%�h�"7�������!�R�[�[�1��W�W�W�d�3�
���C��):�):�7�)C� D�E���o�o�+"�"*��4��x�8'�'.�i�0&�&.�Z�/F�u�g�N�'���
� � �%��(�8�#8�
���i�(�I.�-��H
���i�(�s#�H+�&H�F*H+�
H(	�"	H+�+H>c���[R"[S5S5H;n[R"[S5S5HnUR	X5 M M= g)Nr(r�)�	itertools�combinationsr �permutationsrK)r&rArBs   r�!test_swap_std_fds_with_one_closed�6POSIXProcessTestCase.test_swap_std_fds_with_one_closed4sF��!�.�.�u�Q�x��;�H�#�0�0��q��1�=���8�8��J�>�<rc��Sn[R"[US9 URS5 g![aDnUR[R5 UR[U5S5 SnAgSnAf[RaDnUR[R5 UR[U5S5 SnAgSnAff=f)Nc��[S5e)N�
surrogate:�r~r3rr�prepare�CPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepare:s���/�0�0rr�z1Expected ValueError or subprocess.SubprocessErrorrUz!Exception occurred in preexec_fn.)rrbrrur�rr�rerwr��assertIsNotNone)r&rVr�s   r�test_surrogates_error_message�2POSIXProcessTestCase.test_surrogates_error_message9s���	1�
	K��O�O��"�
$�
�I�I�I�J���	;����j�3�3�4����S��X�'9�:�:���)�)�	L�� � ��!6�!6�7����S��X�'J�K�K��	L�s �0�
C�:A9�9C�:C�Cc��SGHSupURSS5nS[U5-n[RR	5nX%U'SUS'Un[
R"[RSU/US9nURS	5nURURS5[U55 URSS5nS
[U5-n[RR	5nX5U'[
R"[RSU/US9nURS	5nURURS5[U55 GMV g)N))�testuabc�)utest��42r�rsz&import os; print(ascii(os.getenv(%s)))�C�LC_ALLrr�s

z'import os; print(ascii(os.getenvb(%s))))
r*rrr�r�rr�rcrdr�rer9r�)r&�key�value�
encoded_value�scriptr��
decoded_valuerLs        r�test_undecodable_env�)POSIXProcessTestCase.test_undecodable_envLs-��G�J�C�!�L�L��2C�D�M�>��S�	�I�F��*�*�/�/�#�C���H� �C��M�!�M��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J��*�*�W�&7�8�C�>��c��J�F��*�*�/�/�#�C�$��H��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J�5Hrc�,�[R"[S5n[[SS5n[RR[S5up4[R"U5n[R"U/U-5nURUS5 SUSRU5RS54-n[R"USS9nURUS5 [RR5nX7S'[R"U/U-US	9nURUS5 [RR5n[R"U5US
'[R"U/U-US	9nURUS5 g)Nrr�s'%s' %s� r�Tr�PATHr�sPATH)rrrr�r
r2rrbrerr*r�r��environb)	r&�abs_programrAr
�program�exitcoder�r��envbs	         r�test_bytes_program�'POSIXProcessTestCase.test_bytes_programisC���k�k�/�!�"4�5���O�A�B�'�(�����
�
�o�a�&8�9�
���+�+�g�&���?�?�K�=��#5�6������1�%��K����$��)>�)>�w�)G�H�H���?�?�3�d�3������1�%��j�j�o�o����F���?�?�G�9�T�>�s�;������1�%��{�{���!�����D�)��W�
��?�?�G�9�T�>�t�<������1�%rc��[R"SSS9n[R"SSS9n[R"[R
U/[R[R[RSS9nURURS5 [R"[R
U/[RSS9nUR5upV[[[URS	555n[URR5URR5UR R5/5nUR#Xx-S
U<SXx-<35 g)Nzinput_reader.py�subprocessdata��subdir�fd_status.pyF)rKrLrMrr�rLr�,zExpected no fds from z to be open in child, found )r�findfilerrNrcrdrOr�r�rLr@r�r2rKrmrLrMr.)	r&�sleeper�	fd_status�p1�p2r��error�
result_fds�unwanted_fdss	         r�test_pipe_cloexec�&POSIXProcessTestCase.test_pipe_cloexec�s���"�"�#4�=M�N���$�$�^�<L�M�	�
�
�
�s�~�~�w�7�$.�O�O�J�O�O�%/�_�_��G��	
�������,�
�
�
�s�~�~�y�9�%/�_�_��G�����(�
����S�&�,�,�t�"4�5�6�
��B�H�H�O�O�-�r�y�y�/?�/?�/A��I�I�,�,�.�0�1��	
����2� ,�Z�-F�H�	Irc��^
^�[R"SSS9n[R"SSS9nSnUS-S-n[R"[R
U/[R[RSS	9m
[R"[R
X#/T
R[RSS	9mURT
R5 URTR5 U
4S
jnU4SjnURU5 URU5 T
RRU5 T
RR5 [R"TR///S5upxn	URUS
5 URTRR!5U5 T
RR5 TRR5 g)Nzqcat.pyrrrszqgrep.pyszxcvbn��
F)rKrLrc�H>�TR5 g![a gf=fr#�r��ProcessLookupError)r{s�r�kill_p1�BPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1��#���
������%�
��
����
!�!c�H>�TR5 g![a gf=fr#r�)r|s�r�kill_p2�BPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2�r�r�rzzThe child hung)rrxrrNrcrdrOrLr�r,rKr�rSrr=rer8)r&�qcat�qgrep�subdatar�r�r��	readfiles�ignored1�ignored2r{r|s          @@r�test_pipe_cloexec_real_tools�1POSIXProcessTestCase.test_pipe_cloexec_real_tools�s]������	�2B�C��� � ��4D�E������{�U�"��
�
�
�s�~�~�t�4�$.�O�O�J�O�O�(-�/���
�
�s�~�~�u�>�$&�I�I�j�o�o�(-�/��	
������ ������� �	�
	�
	
���� ����� �
�����t��
������(.�
�
�r�y�y�k�2�r�2�(N�%�	�X����	�#3�4���������)�4�0�
�	�	����
�	�	���rc��^
�[R"SSS9n[R"5nUR	[R
US5 UR	[R
US5 [
U5m
[S5Hgn[R"[R[R5nUR	[R
U5 T
RU5 Mi T
Hn[R"US5 M [R"[R U/[R"SS	9nUR%5upg[
['[(UR+S
555nUR-UT
-T
S5 [R"[R U/[R"SS	9nUR%5upg[
['[(UR+S
555nUR/UT
-S5 UR1SUS
5 [
U
4Sj[S555n	[R"[R U/[R"SU	S9nUR%5upg[
['[(UR+S
555nUR/X�-
T
-S5 UR1SUS
5 g)Nrurrrsrr��	TFrvrwzSome fds were closedzSome fds were left openzSubprocess failedc3�D># �UHnTR5v� M g7fr#)r�)�.0r�r�s  �r�	<genexpr>�6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>�s����;�(�Q�(�,�,�.�.�(�s� r��rLr�pass_fdsz'Some fds not in pass_fds were left open)rrxrr�r�rSrLr r��devnullr��add�set_inheritablerrNrcrdrOr�r@r�r2rer.rv)r&rzr�r�r�rUr��ignored�
remaining_fds�fds_to_keepr�s          @r�test_close_fds�#POSIXProcessTestCase.test_close_fds�s(����$�$�^�<L�M�	��g�g�i��������#�a�&�)�������#�a�&�)��s�8���q��A�������R�[�[�1�B��O�O�B�H�H�b�)��L�L����
�B����r�4�(��
���c�n�n�i�8�$.�O�O�u�
F���-�-�/����C��V�\�\�$�%7�8�9�
������1�8�/�	1�
���c�n�n�i�8�$.�O�O�t�
E���-�-�/����C��V�\�\�$�%7�8�9�
������1�2�	4��
�
�a��(;�<��;�%��(�;�;�����c�n�n�i�8�$.�O�O�t�&1�
3���-�-�/����C��V�\�\�$�%7�8�9�
����-�5��A�B�	D��
�
�a��(;�<r�freebsdz/devz/dev/fdz.Requires fdescfs mounted on /dev/fd on FreeBSDc�J�[R"SSS9n[R"[R
S[R"SU-5/[RS9nUR5up4UR5nUR[U5SSU-S	9 [[[US
R!5R#S555n[[[USR!5R#S555nUR%Xv-S
S	9 g)z;Confirm that issue21618 is fixed (may fail under valgrind).rurrrsraK
        import os, resource, subprocess, sys, textwrap
        open_fds = set()
        # Add a bunch more fds to pass down.
        for _ in range(40):
            fd = os.open(os.devnull, os.O_RDONLY)
            open_fds.add(fd)

        # Leave a two pairs of low ones available for use by the
        # internal child error pipe and the stdout pipe.
        # We also leave 10 more open as some Python buildbots run into
        # "too many open files" errors during the test if we do not.
        for fd in sorted(open_fds)[:14]:
            os.close(fd)
            open_fds.remove(fd)

        for fd in open_fds:
            #self.addCleanup(os.close, fd)
            os.set_inheritable(fd, True)

        max_fd_open = max(open_fds)

        # Communicate the open_fds to the parent unittest.TestCase process.
        print(','.join(map(str, sorted(open_fds))))
        sys.stdout.flush()

        rlim_cur, rlim_max = resource.getrlimit(resource.RLIMIT_NOFILE)
        try:
            # 29 is lower than the highest fds we are leaving open.
            resource.setrlimit(resource.RLIMIT_NOFILE, (29, rlim_max))
            # Launch a new Python interpreter with our low fd rlim_cur that
            # inherits open fds above that limit.  It then uses subprocess
            # with close_fds=True to get a report of open fds in the child.
            # An explicit list of fds to check is passed to fd_status.py as
            # letting fd_status rely on its default logic would miss the
            # fds above rlim_cur as it normally only checks up to that limit.
            subprocess.Popen(
                [sys.executable, '-c',
                 textwrap.dedent("""
                     import subprocess, sys
                     subprocess.Popen([sys.executable, %r] +
                                      [str(x) for x in range({max_fd})],
                                      close_fds=True).wait()
                     """.format(max_fd=max_fd_open+1))],
                close_fds=False).wait()
        finally:
            resource.setrlimit(resource.RLIMIT_NOFILE, (rlim_cur, rlim_max))
        r�r�z(expected exactly two lines of output:
%rrrrwr�zSome fds were left open.N)rrxrrNrcrdrdrerOr�r�rer"rLr@r�r�r2r.)r&rzrUr��
unused_stderr�output_lines�
opened_fdsr�s        r�%test_close_fds_when_max_fd_is_lowered�:POSIXProcessTestCase.test_close_fds_when_max_fd_is_lowered�s��
�$�$�^�<L�M�	�
���c�n�n�d�H�O�O�/	�^�_/	�05�0�`#-�/�/�a0
3��d!"�
�
�����(�(�*������\�*�A�H�6�Q�	�	S���S�,�q�/�"7�"7�"9�"?�"?��"E�F�G�
��C��\�!�_�%:�%:�%<�%B�%B�4�%H�I�J�
�����3�7�	�	9rrzr�c
���[R"SSS9n[5n[S5H�n[R
"5nUR
[RUS5 UR
[RUS5 [R"USS5 [R"USS5 URU5 M� UGHn[R"[RU/[RSU4S9nUR5upx[[!["UR%S	555n	X%1-
n
UR'XYS
5 UR)X�-S5 UR+[,5nUR)[R."[0SU4S
95 SSS5 UR'S[3WR455 GM g!,(df   N9=f)Nrurrrsr�rr�Tr�rwzfd to be passed not passedzfd to be closed passedF)rr�zoverriding close_fds)rrxrLr rr�r�rSr��updaterrNrcrdrOr�r@r�r2rvr.�assertWarnsr�rbrrw�warning)r&rzr�rKr�r�rUr�r�r��to_be_closed�contexts            r�
test_pass_fds�"POSIXProcessTestCase.test_pass_fdsGs~���$�$�^�<L�M�	��5���q��A��'�'�)�C��O�O�B�H�H�c�!�f�-��O�O�B�H�H�c�!�f�-����s�1�v�t�,����s�1�v�t�,��O�O�C� �
��B�� � �#�.�.�)�!<�(2���4�+-�&�2�A� �m�m�o�O�F���C����d�);� <�=�M�#�d�?�L��M�M�"�-I�J����]�9�5�
7��!�!�.�1�W�� � ����'�"'�2�&�":�;�2�
�M�M�0�#�g�o�o�2F�G�%�2�1�s�+G&�&
G4	c�.�[R"SSS9n[R"5up#UR	[R
U5 UR	[R
U5 [R"US5 [R"US5 X#4n[RU/nU[[[U55-
n[R"U[RSUS9nUR5upx[![["UR%S555n	UR'U	[!U5SU-5 UR'[R("U5S5 UR'[R("U5S5 g)	NrurrrsTFr�rwz	output=%a)rrxrr�r�rSr�rcrdr�r@rwrrNrOr�rLr�r2rer�)
r&rcr��non_inheritabler�rArUr�r�r�s
          r�test_pass_fds_inheritable�.POSIXProcessTestCase.test_pass_fds_inheritableis/���!�!�.�9I�J��')�w�w�y�$��������+�.�������/�2�
���;��-�
���?�E�2��1������'����S��h�'�(�(�����T�$.�O�O�t�&.�
0���-�-�/����#�c�6�<�<��-�.�/��	
����c�(�m�[�6�-A�B�	
����+�+�K�8�$�?�����+�+�O�<�e�Drc	�^�[R"SSS9n/n[S5Hgn[R"[R
[R5nUR[RU5 URU5 Mi [R"5upVUR[RU5 UR[RU5 URSU5 [R"[RU/USUSUSSUS9 [R "US	5nS
S
S
5 WR#S5Vs1sHn[%U5iM n	nUR'U	1Sk[)U5-S
U<35 g
!,(df   N^=fs snf)z7Regression test for https://bugs.python.org/issue32270.rurrrsr�r�rT)rKrLrMrr�rNrw>rr�r�zoutput=)rrxr rr�r��O_RDWRr�rSr�r��insertrrNrcrdr8r2r�re�	frozenset)
r&rzr�r�r��stdout_r�stdout_wr��numr�s
          r�test_pass_fds_redirected�-POSIXProcessTestCase.test_pass_fds_redirected�sB���$�$�^�<L�M�	����q��A�������R�Y�Y�/�B��O�O�B�H�H�b�)��O�O�B���
 �W�W�Y���������(�+�������(�+�����8�$�
�
�
�s�~�~�y�9�$,�Q�K�%-�a�[�%-�a�[�(,�'/�1��W�W�X�t�,�F�
1�$*�<�<��#5�6�#5�C�s�3�x�#5��6�����i�)�H�*=�=���
�?S�T�1�1��7s�)F�F*�
F'c���[R"[RS5n[R
"[XS9nUR5 SSS5 g!,(df   g=f)N�r+)rLrK�rQr�rr�rrNrr,�r&�inoutrUs   r�%test_stdout_stdin_are_single_inout_fd�:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd��@��
�W�W�R�Z�Z��
&�%�� � ��(-�<�A�
�F�F�H�'�
&�
&���*A�
A'c���[R"[RS5n[R
"[XS9nUR5 SSS5 g!,(df   g=f)Nr�r�r�r�s   r�&test_stdout_stderr_are_single_inout_fd�;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fd�s@��
�W�W�R�Z�Z��
&�%�� � ��(-�=�A�
�F�F�H�'�
&�
&�r�c���[R"[RS5n[R
"[XS9nUR5 SSS5 g!,(df   g=f)Nr�)rMrKr�r�s   r�%test_stderr_stdin_are_single_inout_fd�:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fd�r�r�c�4�[R"SSS9n[R"[R
U/[R[RS9nUR5up4URSURSURS5-5 g)Nzsigchild_ignore.pyrrrsr�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rrxrrNrcrdrOr�rerr9)r&�sigchild_ignorerUrLrMs     r�test_wait_when_sigchild_ignored�4POSIXProcessTestCase.test_wait_when_sigchild_ignored�s{��!�*�*�+?�2B�D�����c�n�n�o�>�$.�O�O�J�O�O�
M������������A�L�L�+:����w�/�+0�	1rc	���[R"S5n[R"[R
SS/[RSS9nURnURUR5 URURS5S5 URX1R"U///S5S5 UR5 g!UR5 f=f)	Nrrz$import sys;sys.stdout.write("apple")r)rLrYr�sapplg)r�
import_modulerrNrcrdrOrLr�rSrer8rvrr,)r&rrUrDs    r�test_select_unbuffered�+POSIXProcessTestCase.test_select_unbuffered�s����,�,�X�6�����c�n�n�d�:�;�%/�O�O�%&�	
(��

�H�H�������� �	����Q�V�V�A�Y��0��M�M�!�]�]�A�3��B��<�Q�?�@�
�F�F�H��A�F�F�H�s
�4A	C�C c	��[R"[RSS/[R[RS9nURURR5 URURR5 [U5nURn[R"S[45 SnSSS5 [(a UR[R 5 gUR#U[R Vs/sHn[U5PM sn5 g!,(df   Nt=fs snf)Nrz import sys, time;time.sleep(0.2)r�r)rrNrcrdrOr�rLrSrM�id�pidr�check_warnings�ResourceWarningr*rr+rv)r&rU�identr��os     r�test_zombie_fast_process_del�1POSIXProcessTestCase.test_zombie_fast_process_del�s���

���c�n�n�d�0�1�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B��A�C��9����j�0�0�1�
�M�M�%��1C�1C�!D�1C�A�"�Q�%�1C�!D�E�C�
B��"Es�D2�E
�2
Ec	�R�[R"[RSS/[R[RS9nURURR5 URURR5 [U5nURn[R"S[45 Sn[R"5 SSS5 [ R""U[$R&5 [((a UR+[R,5 O:UR/U[R,Vs/sHn[U5PM sn5 [0R2"S5 UR5[65 [R"[8[R[RS9nSSS5 SSS5 UR5[6[ R:US5 [((a UR+[R,5 gUR=U[R,Vs/sHn[U5PM sn5 g!,(df   GN�=fs snf!,(df   N�=f!,(df   N�=fs snf)Nrzimport time;time.sleep(3)r�rr2r)rrNrcrdrOr�rLrSrMr�r�rr�r�r�
gc_collectrr�rr�r*rr+rvr3r�ror�r�waitpidr�)r&rUr�r�r�r�s      r�!test_leak_fast_process_del_killed�6POSIXProcessTestCase.test_leak_fast_process_del_killed�s���
���c�n�n�d�.�/�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B��A���� �C�	����V�^�^�$��9����j�0�0�1�
�M�M�%��1C�1C�!D�1C�A�"�Q�%�1C�!D�E�	
�
�
�3��
�
�
�w�
'��!�!�/�)3���)3���:�=A��:�(�	
���'�2�:�:�s�A�6��9����j�0�0�1����U�J�4F�4F�$G�4F�q�R��U�4F�$G�H�5C�
B��"E�:�:��(�
'��%Hs<�I+�I=
�7J�
J�J�J$
�+
I:�
J	�J�
J!c�^�[R"SSS9n[R"S5mUR	[R
T5 [R"[RU/[RSU4SjS9nUR5up4[[[URS555nUR!TU5 g)	Nrurrrsr�Tc�2>�[R"ST5$r)rr)r�s�rrv�CPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>
s�������2�r)rLrrxrw)rrxrr�r�rSrrNrcrdrOr�rLr@r�r2r�)r&rzrUr�r�r�r�s      @r�test_close_fds_after_preexec�1POSIXProcessTestCase.test_close_fds_after_preexec
s�����$�$�^�<L�M�	��V�V�A�Y��������"�%����c�n�n�i�8�$.�O�O�t�(>�
@���-�-�/����C��V�\�\�$�%7�8�9�
�����]�+rc�*�SSKn[R"5nSn[R"5 SS/SS/4S/SSS/4S/S/SS/4S/S/SS44HnupEpgUR	[
5nUR
XESSXgS	S	S	S	S
SSS
SSSS/SS	US5 SSS5 URS[WR55 Mp U(d[R"5 gg!,(df   NU=f!U(d[R"5 ff=f)Nrc��gr#r3r3rrrv�5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>-
s��4rrsexe�envsargTr3rtr�r�r(r�Fz
takes exactly)�_posixsubprocessr�r�r�ror�r�r�rwr�r�)	r&r��
gc_enabled�funcrA�exe_listr-�env_listr�s	         r�test_fork_exec�#POSIXProcessTestCase.test_fork_exec#
s��	 ��\�\�^�
� 	� �D��I�I�K��F�8�T�F�8�4���3�T�F�8�4���F�8�S�F�8�4���F�8�T�3�/�	2�-����&�&�y�1�S�$�.�.���b�#��B��B��1�a���d�A��r�1�b��e�%�2� � � ��#�c�m�m�2D�E�-2�0��
�
���%2�1��$��
�
���s$�AC3�-&C"�1C3�"
C0	�,C3�3Dc�F�SSKn"SS5n[R"5n[R"5 SSSSSU"S	5U"S
544H~nUR	[
SR
U5S9nURS
/S
/SUSS/SSSSS	S
SSSSSSSSSSS5 SSS5 URS[WR55 M� U(d[R"5 gg!,(df   NU=f!U(d[R"5 ff=f)Nrc�$�\rSrSrSrSrSrSrg)�JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntiO
Tc��Xlgr#)ra)r&ras  rr��SPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__Q
s��"�
rc�V�UR(aSUlUR$[e)NF)�firstrar�r%s r�__int__�RPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__S
s ���:�:�!&�D�J��:�:�%� � r)r�raN)r5r6r7r8r�r�r�r9r3rr�BadIntr�O
s���E�
#�
!rr)rtr�r(r�r�)rwr�)���*l)r�r�)rXrrr�r�r�zfds_to_keep={}rsfalseTr�rtr(r�r�)r�r�r�r�ror�rur�rvrwr�r�)r&r�rr�r�r�s      r�%test_fork_exec_sorted_fd_sanity_check�:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_checkK
s��	 �	!�	!��\�\�^�
�	��I�I�K�!��#������F�1�I�&�
 ���&�&�"�,�3�3�K�@�'�B�EF�$�.�.�!�
�X�J��k�4�&���B��B��1�a���d�A��d�D�"��d�$�B��
�
�m�S����-=�>�' �*��
�
���B�B����
�
���s$�AD�6+C0�!1D�0
C>	�:D�D c�b�[R"[5nU [RRUS5n[URlUR5 URR5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)NrK)rrNrrrr�BrokenPipeErrorrSr�r��assert_called_with�r&r��mock_proc_stdins   r�,test_communicate_BrokenPipeError_stdin_close�APOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_closeu
sm������0��
�4�:�:�$�$�T�7�3��0?�O�!�!�-������!�!�4�4�6�4�T�T�3�3��T�T�s#�!B �AB�>B �
B	�B � 
B.c��[R"[5nU [RRUS5n[URlURS5 URRS5 URR5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)NrK�stuff)rrNrrrrrr�r�r�rArSr
s   r�,test_communicate_BrokenPipeError_stdin_write�APOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write~
s�������0��
�4�:�:�$�$�T�7�3��0?�O�!�!�-����X�&��!�!�9�9�(�C��!�!�9�9�;�	4�T�T�3�3��T�T�s#�!B<�AB+�B<�+
B9	�5B<�<
C
c�Z�[R"[RS/[R[RS9nU [
RRUS5n[[RS5n[URl
UR5URlUR!S5 URR#5 SSS5 SSS5 SSS5 g!,(df   N=f!,(df   N(=f!,(df   g=f)N�-hrrK�wbr)rrNrcrdrOrrrr�rr�rrZr�rmr?r�rA)r&r�r�dev_nulls    r�,test_communicate_BrokenPipeError_stdin_flush�APOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush�
s���������� 6�&0�o�o�'1���8���4�:�:�$�$�T�7�3���R�Z�Z��&�(�0?�O�!�!�-�2:�/�/�2C�O�"�"�/����X�&��!�!�9�9�;�
'�4�T�T�&�&��4�3��T�T�s=�!D�&D�A C:�!D�)D�:
D�D�
D	�D�
D*c��[R"[RS/[R[RS9nU [
RRUS5n[URl
URSS9 URR5 SSS5 SSS5 g!,(df   N=f!,(df   g=f)NrrrKi�rm)
rrNrcrdrOrrrrrSr�r�rAr
s   r�9test_communicate_BrokenPipeError_stdin_close_with_timeout�NPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout�
s���������� 6�&0�o�o�'1���8���4�:�:�$�$�T�7�3��0?�O�!�!�-����S��)��!�!�9�9�;�	4�T�T�3�3��T�T�s$�!C�&?B6�%C�6
C	�C�
CN�
W_STOPCODEzneed _testcapi.W_STOPCODEc�`�[n[R"U5n[R"UR
SS9 [R"S5n[R"SUR
U4S9 UR5nSSS5 URWS5 g!,(df   N!=f)zATest wait() behavior when waitpid returns WIFSTOPPED; issue29335.r�rmr(r�r>N���)rrrNr�wait_processr��	_testcapirrrr,re)r&rAr��statusrs     r�test_stopped�!POSIXProcessTestCase.test_stopped�
s���
������%��	���T�X�X��2��%�%�a�(��
�Z�Z�/�t�x�x��>P�
Q�����J�R�	
����R�(�R�
Q�s�3B�
B-c��[R"[5n[R"UR
SS9 UR
UR5 [R"S5nUR[R5 SSS5 WR5 URUR5 g!,(df   N:=f)Nrrzos.kill)rrNrrrr�rrrrr�rr��assert_not_calledrX)r&r��	mock_kills   r�test_send_signal_race�*POSIXProcessTestCase.test_send_signal_race�
s�������0��	���T�X�X��2�	
���$�/�/�*�
�Z�Z�	�
"�i����V�^�^�,�#�
	�#�#�%�	
���T�_�_�-�#�
"�s�+ B?�?
C
c��[R"[RSS/5nUR(d#UR5 UR(dM#[RRUSSS9 SUlUR[R5 SSS5 UR5 g!,(df   N=f)Nrzexit(1)r�c��gr#r3r3rrrv�=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>�
s��dr��new)
rrNrcrdrr�rrrr�rr�r�rTs  r�test_send_signal_race2�+POSIXProcessTestCase.test_send_signal_race2�
s���
���c�n�n�d�I�>�?���,�,�
�F�F�H��,�,�,��Z�Z�
�
�q�&�l�
�
;��A�L�
�M�M�&�.�.�)�<�	
����<�
;�s�<'B<�<
C
c���[R"[RSS/[RS9nURSS9 g![Ra Of=fM-)Nrz+import os, time; os.close(1), time.sleep(2)r�rlrm)rrNrcrdrOr�rp�r&r�s  r�1test_communicate_repeated_call_after_stdout_close�FPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_close�
se���������!N�!P�'1���8���
�� � �� �-����,�,�
��
��	s�A�A�Ac��S[S3n[SU5up#nURUR5S5 UR	SU5 g)Nz�if 1:
        import atexit
        import subprocess

        def dummy():
            pass

        class AtFinalization:
            def __del__(self):
                print("OK")
                subprocess.Popen(zu, preexec_fn=dummy)
                print("shouldn't be printed")
        at_finalization = AtFinalization()
        rsOKs0preexec_fn not supported at interpreter shutdown)rr	rer�rv)r&r�r�r�r�s     r�test_preexec_at_exit�)POSIXProcessTestCase.test_preexec_at_exit�
sR��
"�#2�!2�3	�
��'�t�T�2�����������e�,��
�
�I�3�Or�
HAVE_VFORKz!vfork() not enabled by configure.zsubprocess._USE_POSIX_SPAWNFr,c��UR[R5 [S5UlUR[5 [R"[RSS/5 SSS5 UR5 URURRS5 [RR[SS5 UR[5 [R"[RSS/5 SSS5 URUR SRS5 SSS5 g!,(df   N�=f!,(df   NS=f!,(df   g=f)Nzjust testing argsrrrt�
_USE_VFORKF)r=rr9�RuntimeErrorr�rorrcrd�assert_called_once�	call_argsrArrrr.�call_args_list)r&�mock_fork_execs  r�test__use_vfork�$POSIXProcessTestCase.test__use_vfork�
s��
	
���
�-�-�.�%1�2E�%F��"�
�
�
�|�
,��N�N�C�N�N�D�&�9�:�-��)�)�+�	
����0�0�5�5�b�9�:�
�Z�Z�
�
�z�<��
?��"�"�<�0��������f�=�>�1����^�:�:�2�>�C�C�B�G�H�@�
?�-�
,��1�0��@�
?�s0�(E�E.�((E�3E.�
E�
E+	�'E.�.
E<�linuxzLinux only, requires strace.c�Z�SnSnSnX/n[R"XC/-[R[RS9nURnUR
nU(dSU;aURS5 URS	S
9 [S[R"SU<S
35US9nURURS5 SSS5 SSSSS[R"53S4SSS[R "53S4S4Hgup�p�URU	S
9 [S[R"SU
SU<SUSUS3	5US9n
UR#U
RS5 SSS5 Mi g![a SnSnGN.f=f!,(df   N�=f!,(df   M�=f)Nz/usr/bin/stracez6--trace=clone,clone2,clone3,fork,vfork,exit,exit_groupz	/bin/true)rMrLrtrs+++ exited with 0 +++z,strace not found or not working as expected.�default_is_vfork)r[rzQ                    import subprocess
                    subprocess.check_call([z]))�__run_using_commands	(?i)vfork)z
!use_vforkzsubprocess._USE_VFORK = FalserF)�preexecrzpreexec_fn=lambda: NoneF�setgidzgroup=T�setuidzuser=)r=rzextra_groups=[]Tz:                    import subprocess
                    zj
                    try:
                        subprocess.check_call(
                                [z
], **dict(zN))
                    except PermissionError:
                        if not z#:
                            raise)rrrOr�rrMr�r�rr	rdre�assertRegexr�r�getgid�getuid�assertNotRegex)r&�
strace_binary�
strace_filter�true_binary�strace_command�does_strace_work_processrgrM�vfork_result�sub_name�preamble�sp_kwarg�expect_permission_error�non_vfork_results              r�test_vfork_used_when_expected�2POSIXProcessTestCase.test_vfork_used_when_expected	s���*�
�P�
�!��'�7��
	�'1�~�~�"�]�2�%�?�?�%�-�-�(�$�
*�4�4�B�-�4�4�F��*�&�8��M�M�H�I�
�\�\�1�\�
2�+���O�O�),�,7�?�"�%@�A�)7��L�
���\�-�-�}�=�3� K�A��2���	�	��}�5�t�<��2��r�y�y�{�m�4�d�;�:�F
�A�H�����8��,�#3���O�O�)��J�"�#.��
�8�*�E � 7�8�9"�%%�&�)7�$� ��#�#�$4�$8�$8�-�H�-�,�F
��+�	��B��F�	��3�
2��,-�,�s,�A
E5�AF
�A
F�5F�F�

F�
F*	)r�)xr5r6r7r8r'r�r�r�r�rrNr�rrr�r�r�rKrr
r�r�rrPrQr
r&r+r8r;rArDr@rSr*r]rarirmrprzr�r�r�r�rcr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rrrrrrrrr r%r2r8r;rKrQrYreror�r�r�rX�st_devr�r�requires_mac_verr�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�rrrrrr r"r'r.r2r5rNrRr?rWr9�
__classcell__�r�s@rr�r��s����>�!�
B�
B�B�*�J�,�,��
�Z�Z�'�(�A�)�A� 
�Z�Z�'�(�:�)�:�*�_�_������(;�<�<�-�/�4�/�4�,7� �����Y�/�J�G�B�	�4J�<�>�9�>�9� �����Z�0�2K�L�1F�M�1F�f�_�_�W�R��,�.P�Q�?�R�?������Z�0�2M�N�'I�O�'I�R�_�_�W�R��,�.P�Q�@�R�@������[�1�3O�P�E�Q�E�
�����[�1�3O�P�F�Q�F�A�@8��_�_�Y�:�g�b�'�&:�":�6�8�&�8�&�(8�	9�?�
?�
	8�0� %��!1�!1�%�2�_�_�������4�4�6K�L�E�M�E��*�_�_����� �"E�G�L�G�L�(+�	,�L�L�!�N�(�2�_�_�S�\�\�,�,�-B�C�9�;��;��*)�4�4�>�(�-���
)�2&�&�&�)�)�)�,�
!�*+�Z+�`%�()�XK�
K�&K�:&�6I�.'�R-=�`�_�_�S�\�\�,�,�Y�7�I��W�W�V�_�+�+�r�w�w�y�/A�/H�/H�H�E�G�I9�G�I9�`
���b�!�$�H�%�H�BE�<U�4���	1��"F�0)I�V,�"
���%��%�N
���'��'�R7�<�
<�
<�����$�.�>�$�Y��=�4�6�)�6�)�.�,�	�P�&�_�_��1�1�,�?�?�8�:�	�Z�Z�'�(�	�Z�Z�-�5�9�
I�:�)�:�
I��_�_��1�1�,�?�?�8�:�
�_�_�S�\�\�W�,�.L�M�	�Z�Z�-�5�9�?I�:�N�:�?Irr�zWindows specific testsc��\rSrSrSrSrSrSrSr\	RS5rSrS	r
S
rSrSrS
rSrSrSrSrSrSrSrSrSrSrSrg)�Win32ProcessTestCaseiOc��SnSn[R"5nXlX#l[R"[
US9 g)Nr�r(r�)r�STARTUPINFO�dwFlags�wShowWindowrbr)r&�STARTF_USESHOWWINDOW�SW_MAXIMIZEr�s    r�test_startupinfo�%Win32ProcessTestCase.test_startupinfoRs<�� !���� �,�,�.��2��"-��	����$/�	1rc�h�SnSn[R"UUS9n[R"[US9 g)Nr�r()rbrcr�)rrarbr)r&�STARTF_USERSHOWWINDOWrer�s    r�test_startupinfo_keywords�.Win32ProcessTestCase.test_startupinfo_keywordsas8��!"���� �,�,�)�#�
��	����$/�	1rc	�~�[R"5n[RUl[RUl[
S5GHLn[n[[RS5n[R"UU[RUS9nU UR5 SSS5 URURS5 SSS5 URUR[R5 UR!UR"5 UR!UR$5 UR!UR&5 URUR
[R5 URUR(S/05 GMO g!,(df   N�=f!,(df   N�=f)Nr�r�)rLrMr�r�handle_list)rrardrb�SW_HIDErcr rr�rr�rNr�r�rerr�	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r&r�r�r��nullr�s      r�test_startupinfo_copy�*Win32ProcessTestCase.test_startupinfo_copyqsG�� �,�,�.��(�=�=���",�"4�"4����q��A�!�C��b�j�j�#�&�$�!�'�'��/3�/9�/@�/@�4?�A����$�$�&��� � ����!�4�'�
���[�0�0�'�<�<�
>����k�3�3�4����k�4�4�5����k�3�3�4����[�4�4�j�6H�6H�I����[�8�8�=�"�:M�N�#��T��'�&�s$�/(F.�F�($F.�
F+�'F.�.
F<	c��Sn[RRS5 [R"[R
S-US9 g)N�z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r�)rcrMr�rrbrd)r&�CREATE_NEW_CONSOLEs  r�test_creationflags�'Win32ProcessTestCase.test_creationflags�s8�����
�
���C�D�������=�>�&8�	:rc�p�UR[[R[R
SS/SS9 g)Nrr_c��grr3r3rrrv�8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>�s��Qrr�r�r%s rr��&Win32ProcessTestCase.test_invalid_args�s1�����*�j�o�o��>�>�4�5�7�%.�	�	0rc��"SS[5nUR[5 [R"[
U"5S9 SSS5 g!,(df   g=f)Nc��\rSrSrSrSrg)�4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvi�Nr3)r5r6r7r8�keysr9r3rr�BadEnvr��s���Drr�r�)�dictror�rrNr)r&r�s  r�test_issue31471�$Win32ProcessTestCase.test_issue31471�s:��	�T�	�
�
�
�y�
)����_�&�(�;�*�
)�
)�s�A
�
Ac�t�[R"[RSS/SS9nUR	US5 g)Nrr_T)rr`rarfs  rr��#Win32ProcessTestCase.test_close_fds�s5��
�_�_�c�n�n�d�8�:�(,�.��	
����R� rc	��SSKn[R"5nUR[RUS5 UR[RUS5 /nUH:n[R
"US5 UR
URU55 M< [R"[RSSRUS5/[RSS9nUR5upgURUR S5 [#UR%55 [R"[RSSRUS5/[R[RSS9nUR5upgURUR S5 UR'S	U5 /n[R("5n	S
U0U	l[R"[RSSRUS5/[R[RU	SS9nUR5upgURUR S5 UR'S	U5 [,R."S[045 [R("5n	S
USS0U	l[R"[RSSRUS5/[R[RU	SS9nUR5upgURUR S5 SSS5 g!,(df   g=f)
Nrr�Trz2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Frv)rLrMrsOSErrorrm)rLrMr�rz.*overriding close_fds)r�rr�r�rSr�r��
get_osfhandlerrNrcrdrurOr�rerr�r�rvrarrrr�r�)
r&r�r�r�r�rUrLrMrmr�s
          r�test_close_fds_with_stdio�.Win32ProcessTestCase.test_close_fds_with_stdio�s�����g�g�i��������#�a�&�)�������#�a�&�)����B����r�4�(��N�N�6�/�/��3�4��
���c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�u�
F��������������q�)��F�L�L�N�����c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�J�O�O�W[�
]��������������q�)��
�
�j�&�)��� �,�,�.��'4�k�&B��#����c�n�n�d�R�Y�Y�Za�bc�Zd�e�g�$.�O�O�J�O�O�)4��
F��������������q�)��
�
�j�&�)��
+�
+�-E�-;�-=�>�$�0�0�2�K�+8�'�!�*�*E�K�'�� � �#�.�.�$�"V�"]�"]�^e�fg�^h�"i�"k�(2���
���-8�E�K�A��]�]�_�N�F����Q�\�\�1�-�>�>�>�s
�B'M	�	
Mc�n�[R"5n0Ul[R"[US9 g)Nr��rrarrrbr�r&r�s  r�test_empty_attribute_list�.Win32ProcessTestCase.test_empty_attribute_list�s)�� �,�,�.��&(��#�����$/�	1rc�r�[R"5nS/0Ul[R"[US9 g)Nrmr�r�r�s  r�test_empty_handle_list�+Win32ProcessTestCase.test_empty_handle_list�s.�� �,�,�.��'4�b�&9��#�����$/�	1rc�"�[RR5nSUS'[R"S/S[R
US9nU UR
SURR55 SSS5 g!,(df   g=f�N�physalisr�rLr�r�sphysalis�	rr�r�rrNrOrvrLr8r�s   rr��(Win32ProcessTestCase.test_shell_sequence�sb�������"��$��w�����e�W�A�$.�O�O�!'�
)����M�M�+�q�x�x�}�}��7��Q�Q�s�+B�
Bc� �[RR5nSUS'[R"SS[R
US9nU UR
SURR55 SSS5 g!,(df   g=fr�r�r�s   rr��&Win32ProcessTestCase.test_shell_string�s`�������"��$��w�����U�!�$.�O�O�!'�
)����M�M�+�q�x�x�}�}��7��Q�Q�s�+A?�?
B
c	�8�SH�n[RR5nSUS'[R"SS[R
UUS9nU UR
SURR5U5 SSS5 M� g!,(df   M�=f)N)�ansi�oemr�r�rLr�)r!rLr�r�r�)r&�encr�rUs    r�test_shell_encodings�)Win32ProcessTestCase.test_shell_encodings�st��"�C��Z�Z�_�_�&�F�(�F�7�O�� � ��a�(2���%+�*-�/�A���
�
�j�!�(�(�-�-�/�3�?���#���s�,B
�

B	c�v�[R"[RS-5nUR	US5 g)Nz -c "import sys; sys.exit(47)"r`rarfs  rr��%Win32ProcessTestCase.test_call_string	s.��
�_�_�S�^�^�=�>�?������R� rc��[R"[RSS/[R[R[RS9nU UR
R
S5 [X15"U6 UR5upEURUS5 UR5nSSS5 URWS5 g!,(df   N!=f)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             rJr�rr)rrNrcrdrOrLr8rr�rer,r�)r&r�rArUr�rMrs       rr��"Win32ProcessTestCase._kill_processs������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���
�H�H�M�M�!���A���%��
�
��I�A����V�S�)�����J��	
���J��*��Q�s
�AC�
Cc���[R"[RSS/[R[R[RS9nU UR
R
S5 [R"S5 [X15"U6 UR5upEURUS5 UR5nSSS5 URWS5 g!,(df   N!=f)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             rJr�rr)
rrNrcrdrOrLr8r3r�rr�rer,)r&r�rArUr�rMrgs       rr��'Win32ProcessTestCase._kill_dead_process$s������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���
�H�H�M�M�!���J�J�q�M��A���%��
�
��I�A����V�S�)�����B��	
����R� ��Q�s
�A4C$�$
C2c�D�URS[R5 gr�)r�rr�r%s rr��%Win32ProcessTestCase.test_send_signal;s�����=�&�.�.�9rc�&�URS5 gr��r�r%s rr��Win32ProcessTestCase.test_kill>s�����6�"rc�&�URS5 gr�r�r%s rr��#Win32ProcessTestCase.test_terminateAs�����;�'rc�D�URS[R5 gr�)r�rr�r%s rr��*Win32ProcessTestCase.test_send_signal_deadDs�����
�v�~�~�>rc�&�URS5 gr�r�r%s rr��#Win32ProcessTestCase.test_kill_deadGs������'rc�&�URS5 gr�r�r%s rr��(Win32ProcessTestCase.test_terminate_deadJs������,rr3N)r5r6r7r8rfrjrtryr�rr[r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r9r3rrr_r_Os���
1�1� O�6:�0�
���<��<�!�0.�d1�1�8�8�
@�!�+�*!�.:�#�(�?�(�-rr_c��\rSrSr"SS\R
5r\RR\R
S5S5r
SrSrSr
S	rS
rSrg)
�	MiscTestsiMc�0^�\rSrSrSr/rU4SjrSrU=r$)�MiscTests.RecordingPopeniOz<A Popen that saves a reference to each instance for testing.c�\>�[TU]"U0UD6 URRU5 gr#)r�r��instances_createdr�)r&rArBr�s   �rr��!MiscTests.RecordingPopen.__init__Ss)����G��d�-�f�-��"�"�)�)�$�/rr3)	r5r6r7r8rEr�r�r9r\r]s@r�RecordingPopenr�Os���J���	0�	0rr��_communicatec	�^�[Ul[RR	[
RS5n[Ul[RR	[
SUR5 UR[5 U"[RSS/4S[
R0UD6 SSS5 SSS5 URSSH5nURU[R"SS9S	UR35 M7 /nURH.nU[R"S
S9:XdMURU5 M0 UR!UR"SURS9 UR%['U5SURS9 SSS5 URR(R+5nUR-5 UR/5 UR%/URR(5 g!,(df   GN[=f!,(df   GNe=f!,(df   N�=f!URR(R+5nUR-5 UR/5 UR%/URR(5 f=f)
a_Fake a SIGINT happening during Popen._communicate() and ._wait().

This avoids the need to actually try and get test environments to send
and receive signals reliably across platforms.  The net effect of a ^C
happening during a blocking subprocess execution which we want to clean
up from is a KeyboardInterrupt coming out of communicate() or wait().
�_waitrNrzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rLNr�rmz.no open-ended wait() after the first allowed: g�?r�r)�KeyboardInterruptr�rrrrrNr�rorcrdr�r=r�rbr��assertLessEqual�
call_countrer"r�r�r�r,)r&�popener�mock__communicaterB�
mock__waitrb�sigint_callsrs        r�_test_keyboardinterrupt_no_kill�)MiscTests._test_keyboardinterrupt_no_killWs0��):��%�	H����"�"�:�#3�#3�W�=��*;�
�&��Z�Z�&�&�z�7�'+�':�':�<��*�*�+<�=������"M�!N�E�(2�'9�'9�E�>D�E�>�<�'�5�5�a�b�9�D��'�'� �$�)�)�D�"9�L�)�8�8�9�;�<�:�
 "��&�5�5�D��t�y�y��6�6�$�+�+�D�1�6��$�$�Z�%:�%:�A�)3�)B�)B�%�D�� � ��\�!2�A�%/�%>�%>�!�@�->�4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�/>�=��<�<��	>�=��4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�s[�.I�;H/�6H�+H�7H�?A7H/�:AH/�I�
H�H�
H,	�'H/�/
H=�9I�A,J,c�@�UR[RSS9 g�NgT㥛� @rm)r�rrbr%s r�#test_call_keyboardinterrupt_no_kill�-MiscTests.test_call_keyboardinterrupt_no_kill�s���,�,�Z�_�_�e�,�Lrc�@�UR[RSS9 gr�)r�rrr%s r�"test_run_keyboardinterrupt_no_kill�,MiscTests.test_run_keyboardinterrupt_no_kill�s���,�,�Z�^�^�U�,�Krc�,�SnURU5 g)Nc�^�[R"U0UD6n[e!,(df   g=fr#)rrNr�)rArB�unused_processs   r�popen_via_context_manager�[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager�s&���!�!�4�2�6�2�n�'�'�3�2�s��
,)r�)r&r�s  r�.test_context_manager_keyboardinterrupt_no_kill�8MiscTests.test_context_manager_keyboardinterrupt_no_kill�s��	(�	
�,�,�-F�Grc���UR[R"S5S5 UR[R"S5S5 Sn[R
"5n[RRUS5n[R"[(aSOSU-5up4URUS5 Ub[R"U5 gg!Ub[R"U5 ff=f)Nz
echo xyzzy�xyzzy)rr�r�ztype zcat r)rer�	getoutput�getstatusoutputr�r�rr
rr*r��rmdir)r&�dirr[r!r�s     r�test_getoutput�MiscTests.test_getoutput�s�������-�-�l�;�W�E�����3�3�L�A�%�	'���	��"�"�$�C��7�7�<�<��U�+�D�'�7�7�%�I��6�T�9�;�N�F������*�������
���s������
��s
�A/C�C6c�\�1Skn[[R5n[5nSSKn[RR5HKupVUR
S5(aM[XdR45(aM:URU5 MM URX#U-
5 g)z*Ensure that __all__ is populated properly.>r�rr��Handler�rNr�)rLr�__all__r6�__dict__�itemsr�r�
ModuleTyper�re)r&�intentionally_excluded�exported�possible_exportsr6r[ras       r�test__all__�MiscTests.test__all__�s���!R���z�)�)�*���5���%�.�.�4�4�6�K�D����s�#�#���%�"2�"2�!4�5�5��� � ��&�7�	
����6L�#L�Mrr3N)r5r6r7r8rrNr�rrrr�r�r�r�r�r�r9r3rrr�r�Ms_��0��)�)�0�
�Z�Z���z�'�'��8�)H�9�)H�VM�L�H��&Nrr��PollSelectorz!Test needs selectors.PollSelectorc� �\rSrSrSrSrSrg)�ProcessTestCaseNoPolli�c��[RUl[R[l[
R
U5 gr#)r�_PopenSelector�
orig_selector�	selectors�SelectSelectorrGr'r%s rr'�ProcessTestCaseNoPoll.setUp�s,��'�6�6���$-�$<�$<�
�!����d�#rc�X�UR[l[R	U5 gr#)r�rr�rGr1r%s rr1�ProcessTestCaseNoPoll.tearDown�s��$(�$6�$6�
�!�� � ��&r)r�Nr4r3rrr�r��s��$�
'rr�zWindows-specific testsc�R^�\rSrSrU4SjrU4SjrSrSrSrSr	Sr
S	rU=r$)
�CommandsWithSpacesi�c��>�[TU]5 [R"SS5upUR	5Ul[R"US5 [R"U5 g)Nz.pyzte stsVimport sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	r�r'r�r�rfr�rr�rS)r&rDr�r�s   �rr'�CommandsWithSpaces.setUp�sN���
��
���#�#�E�7�3����[�[�^��
�
����c�	
�	����rc�b>�[R"UR5 [TU]5 gr#)rr�r�r�r1r�s �rr1�CommandsWithSpaces.tearDown�s���
�	�	�$�*�*��
���rc��[RUS'[R"U0UD6nU URURR5R
S5SUR-5 SSS5 g!,(df   g=f)NrL�mbcsz2 [%r, 'ab cd'])rrOrNrerLr8r9r�)r&rArBrUs    r�with_spaces�CommandsWithSpaces.with_spaces�se��%�?�?��x�����d�-�f�-��
�����h�h�m�m��%�%�f�-��$�*�*�,�
��Q�Q�s�AA<�<
B
c	�n�URS[R<SUR<SS<S3SS9 g)N�"�" "�ab cdr�r�r�rcrdr�r%s r�test_shell_string_with_spaces�0CommandsWithSpaces.test_shell_string_with_spaces�s-�����S�^�^�T�Z�Z�-4�6�=>�	�	@rc�Z�UR[RURS/SS9 g)Nrr�rrr%s r�test_shell_sequence_with_spaces�2CommandsWithSpaces.test_shell_sequence_with_spaces�s$�����#�.�.�$�*�*�g�>�a��Hrc	�p�URS[R<SUR<SS<S35 g)Nrrrrr%s r�test_noshell_string_with_spaces�2CommandsWithSpaces.test_noshell_string_with_spaces�s$�����S�^�^�T�Z�Z�$�&�	'rc�\�UR[RURS/5 g)Nrrr%s r�!test_noshell_sequence_with_spaces�4CommandsWithSpaces.test_noshell_sequence_with_spaces�s�����#�.�.�$�*�*�g�>�?r)r�)
r5r6r7r8r'r1r�rrr
r
r9r\r]s@rr�r��s/������@�
I�'�
@�@rr�c�2�\rSrSrSrSrSrSrSrSr	g)	�ContextManagerTestsi�c��[R"[RSS/[R[RS9nURURR5S5 URURR5S5 SSS5 URWRR5 URURR5 g!,(df   NY=f)NrzAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r�sstdoutsstderr)rrNrcrdrOrerLr8rMr=r>r1s  r�	test_pipe�ContextManagerTests.test_pipe�s���
�
�
�s�~�~�t� =�>�&0�_�_�%/�_�_�6�
:>����T�[�[�-�-�/��;����T�[�[�-�-�/��;�6�	
������*�*�+�������*�*�+�6�6�s
�AC,�,
C:c��[R"[RSS/5nSSS5 UR	WR
S5 g!,(df   N+=f)Nrzimport sys; sys.exit(100)�d)rrNrcrdrerr1s  rr`�#ContextManagerTests.test_returncode�sL��
�
�
�s�~�~�t�:�<�=�@D��=�	
������#�.�	=�=�s�A�
Ac��[R"[RSS/[RS9nURS5 UR
URS5 SSS5 g!,(df   g=f)Nrz2import sys;sys.exit(sys.stdin.read() == 'context')r�scontextr�r�r1s  rr�*ContextManagerTests.test_communicate_stdinsd��
�
�
�s�~�~�t�H�I�$.�?�?�4�8<����Z�(����T�_�_�a�0�4�4�4�s�.A,�,
A:c��UR[5 [R"[[R
[R
S9nSSS5 SSS5 g!,(df   N=f!,(df   g=f)Nr�)rorrrNrrOr1s  rr��%ContextManagerTests.test_invalid_argssV��
�
�
�1�
2��!�!�/�)3���)3���:�=A��:�3�
2�:�:��3�
2�s#�7A1�
A �A1� 
A.	�*A1�1
A?c���[R"[[R[R
S-S9nUR
5nURRS[R
-5 URUR5 UR[URSSS5 URURS5 URURR 5 g)z9Broken pipe error should not prevent wait() (Issue 21619)r�)rKrYr1Nr)rrNrrOrrJ�	__enter__rKr�rrror��__exit__rer=r>r1s  r�test_broken_pipe_cleanup�,ContextManagerTests.test_broken_pipe_cleanups�������&0�o�o�(/�(=�(=�a�(?�A���~�~���	
�
�
����� 5� 5�5�6����$�/�/�*����'�4�=�=�$��d�C�������!�,�����
�
�)�)�*rr3N)
r5r6r7r8rr`rr�rr9r3rrrr�s��,�/�1��+rr�__main__)Hr�rr\r�test.supportrrrr�test.support.script_helperr	rrcrrQrNrr�r�r3r�r6r�rNrrr�r�rdrJ�test.support.os_helperr
r r�rr�r|r��PGOr��has_subprocess_supportr�r*rYrrP�NotADirectoryErrorrrrdrr�TestCaser �	Exceptionr;rNr>rGrVr�rKr�rPr_r�rQr�r�rr5�mainr3rr�<module>r*s������(�&�"�(�7��
�
�	��	��������
�
��	���+������������;�;�
�
�
�9�
:�:��%�%�
�
�
�=�
>�>�
�\�\�W�
$�	�
�@�I��I�)��'�);�_�M���>�>�4��0��(� �8�$�$� �&	��	�>�j�.�.�>�E+�l�E+�P4@O�l�@O�F	c�
����2�3�}I�<�}I�4�}I�@4
���Y� 8�9�{-�<�{-�:�{-�zaN��!�!�aN�H
���W�Y��7�8�:�'�O�'�:�'�
���Y� 8�9�(@�,�(@�:�(@�V3+�,�3+�l�z���M�M�O���A@���I���
��
�C�����
�C������H���
��E�sT�H&�H5�I�I�I"�&H2�1H2�5I�I�I�I�I�I�"I)

Youez - 2016 - github.com/yon3zu
LinuXploit