HEX
Server: Apache
System: Linux bd12.noc223.com 4.18.0-553.121.1.lve.el8.x86_64 #1 SMP Thu Apr 30 16:40:41 UTC 2026 x86_64
User: handcraf (1693)
PHP: 8.1.28
Disabled: NONE
Upload Files
File: //opt/alt/python312/lib64/python3.12/test/__pycache__/test_subprocess.cpython-312.opt-2.pyc
�

~h�e^����ddlZddlmZddlmZddlmZddlmZddlmZddlmZddl	m
Z
ddlZddlZddl
Z
ddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZddlZdd	lm Z 	ddl!Z!	ddl#Z#	ddl$Z$	ddl%Z%ejLrejNd
��ejPsejNd��ejRdk(Z*e*rd
Z+ndZ+dZ,e-e.e/fZ0ejbddfa2d�Z3Gd�dejh�Z5Gd�de6�Z7Gd�dejp�Z9Gd�de5�Z:Gd�de5�Z;d�Z<ejze*d�Gd�d e5��Z>ej~e*d!�Gd"�d#e5��Z@Gd$�d%ejh�ZAej~eBed&�d'�Gd(�d)e:��ZCej~e*d*�Gd+�d,e5��ZDGd-�d.e5�ZEeFd/k(rej��yy#e"$rdZ!Y���wxYw#e"$rdZ#Y���wxYw#e"$rdZ$Y���wxYw#dZ%Y���xYw)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���tjd�}|�ytj|tj�r(tj|g�jdk(r|fayyy)N�truer)	�shutil�which�os�access�X_OK�
subprocess�run�
returncode�ZERO_RETURN_CMD)�
shell_trues �;/opt/alt/python312/lib64/python3.12/test/test_subprocess.py�setUpModulerKsU�����f�%�J����
�	�	�*�b�g�g�&����
�|�$�/�/�1�4�%�-��	5�	'�c��eZdZd�Zd�Zy)�BaseTestCasec�,�tj�y�N)r�
reap_children��selfs r�setUpzBaseTestCase.setUpVs��	���rc�
�tsYtjD]}|j��tj�|jtjd�|j
�tj�y)Nzsubprocess._active not empty)	�	mswindowsr�_active�wait�_cleanup�assertFalse�
doCleanupsrr#)r%�insts  r�tearDownzBaseTestCase.tearDown[sa���"�*�*�
���	�	��
����!�����"�"�$B�
�	
�������rN��__name__�
__module__�__qualname__r&r/�rrr r Us�� �

 rr c��eZdZy)�PopenTestExceptionN)r1r2r3r4rrr6r6hs��rr6c��eZdZ	d�Zy)�PopenExecuteChildRaisesc��td��)NzForced Exception for Test)r6)r%�args�kwargss   r�_execute_childz&PopenExecuteChildRaises._execute_childps�� �!<�=�=rN)r1r2r3r<r4rrr8r8ls���>rr8c�8	�eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Zd�Z
d�Zd
�Zd�Zd�Zd�Zd�Zej*d�d��Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Z e!jDe#d�d��Z$e!jDe#d�d ��Z%e!jDe#d�d!��Z&d"�Z'd#�Z(d$�Z)d%�Z*d&�Z+d'�Z,e!jDe#d(�d)��Z-e!jDe#d(�d*��Z.d+�Z/e!jDe0jbe0jdk7d,�d-��Z3e!jDe0jbe0jdk7d,�e!jDe4jj�d.�d/���Z6d0�Z7d1�Z8d2�Z9d3�Z:d4�Z;d5�Z<d6�Z=d7�Z>d8�Z?d9�Z@d:�ZAd;�ZBd<�ZCd=�ZDd>�ZEd?�ZFe!j�eHxr	eIeHd@�dA�dB��ZJe!j�eHxr	eIeHd@�dA�dC��ZKdD�ZLe!j�e0j�dEk(dF�dG��ZNe!jDe0j�dEk(dH�e!jDe4j�dI�dJk(dK�e!jDePdL�M�dN�dO����ZQe!jDe4j�dI�dJk(dP�e!jDePdL�M�dN�dQ���ZRdR�ZSdS�ZTe!j�e0j�dEk(dF�dT��ZUdU�ZVdV�ZWdW�ZXdX�ZYdY�ZZdZ�Z[d[�Z\d\�Z]d]�Z^d^�Z_d_�Z`d`�Zada�Zbdb�Zcdc�Zddd�Zede�Zfdf�Zgdg�Zhdh�Zidi�Zjdj�Zkdk�Zldl�Zmdm�Zndn�Zodo�Zpej*dp�dq��Zqdr�Zrds�Zsdt�Ztdu�Zudv�Zvdw�Zwdx�Zxdy�Zye!j�eIezdz�d{�e!j�eIe{d|�d}�e!j�eIe{d~�d�d�����Z|e!j�e{j�j�d�e{j��z�d��d���Z�e!jDe#d��d���Z�e!jDe#d��d���Z�d��Z�e!jDe4j�d��d��e��j
d��d����Z�y�)��ProcessTestCasec��tjttjtjtj��}	|j	|j
tj�|j	|jtj�|j	|jtj�|j
j�|jj�|jj�|j�y#|j
j�|jj�|jj�|j�wxYw)N��stdin�stdout�stderr)r�Popenr�PIPE�assertIsInstancerA�io�BufferedIOBaserBrC�closer*�r%�ps  r�test_io_buffered_by_defaultz+ProcessTestCase.test_io_buffered_by_defaultvs������_�#-�?�?�:�?�?�$.�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��tjttjtjtjd��}	|j	|j
tj�|j	|jtj�|j	|jtj�|j
j�|jj�|jj�|j�y#|j
j�|jj�|jj�|j�wxYw)Nr)rArBrC�bufsize)rrDrrErFrArG�	RawIOBaserBrCrIr*rJs  r�test_io_unbuffered_worksz(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�t�tjtjddg�}|j	|d�y�Nr�import sys; sys.exit(47)�/�r�call�sys�
executable�assertEqual�r%�rcs  r�
test_call_seqzProcessTestCase.test_call_seq�s0��
�_�_�c�n�n�d�8�:�;������R� rc��|jtjtjtj
ddgd��y)Nr�while True: pass皙�����?��timeout)�assertRaisesr�TimeoutExpiredrVrWrXr$s r�test_call_timeoutz!ProcessTestCase.test_call_timeout�s7��
	
���*�3�3�Z�_�_��>�>�4�1C�D�"%�	�	'rc�Z�tjt�}|j|d�y�Nr)r�
check_callrrYrZs  r�test_check_call_zeroz$ProcessTestCase.test_check_call_zero�s"��
�
"�
"�?�
3������Q�rc��|jtj�5}tjtj
ddg�ddd�|j
jjd�y#1swY�0xYwrR)	rbr�CalledProcessErrorrgrWrXrY�	exceptionr�r%�cs  r�test_check_call_nonzeroz'ProcessTestCase.test_check_call_nonzero�sl��
�
�
�z�<�<�
=�	@���!�!�3�>�>�4�#=�#?�
@�	@�	
������/�/��4�	@�	@���'A6�6A?c�|�tjtjddg�}|j	d|�|jtd�5tjgd��ddd�|jtd�5tjgd��ddd�y#1swY�@xYw#1swYyxYw)	Nr�
print('BDFL')�BDFLz2stdout argument not allowed, it will be overridden�rBz1check argument not allowed, it will be overriddenF��check)r�check_outputrWrX�assertIn�assertRaisesRegex�
ValueError�r%�outputs  r�test_check_outputz!ProcessTestCase.test_check_output�s����(�(������7�9���
�
�g�v�&�
�
#�
#�J�D�F�	5��#�#�B�t�4�	5��
#�
#�J�C�E�	5��#�#�B�e�4�	5�	5�		5�	5��	5�	5�s�B&�B2�&B/�2B;c��|jtj�5}tjtj
ddg�ddd�|j
jjd�y#1swY�0xYw)Nrzimport sys; sys.exit(5)�)	rbrrjrvrWrXrYrkrrls  r�test_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzero�sk��
�
�
�z�<�<�
=�	G���#�#��^�^�T�+D�E�
G�	G�	
������/�/��3�	G�	G�roc��tjtjddgtj��}|jd|�y)Nr�$import sys; sys.stderr.write('BDFL')�rCrr)rrvrWrX�STDOUTrwrzs  r�test_check_output_stderrz(ProcessTestCase.test_check_output_stderr�s:���(�(�����'M�N�!�(�(�*��	
�
�
�g�v�&rc��tj�}|j|j�|j	d�|jd�t
jtjddg|��}|jd|�y)N�pearrr�6import sys; sys.stdout.write(sys.stdin.read().upper())�rA�PEAR)�tempfile�
TemporaryFile�
addCleanuprI�write�seekrrvrWrXrw)r%�tfr{s   r�test_check_output_stdin_argz+ProcessTestCase.test_check_output_stdin_arg�sl��
�
#�
#�
%��������!�
�����
����
��(�(�����I�K����	
�
�
�g�v�&rc�x�tjtjddgd��}|j	d|�y)Nrr�r���inputr��rrvrWrXrwrzs  r�test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg�s7���(�(�����I�K����	
�
�
�g�v�&rc�z�	tjtjddgd��}|j	d|�y)Nr�3import sys; print('XX' if sys.stdin.read() else '')r�sXX�rrvrWrX�assertNotInrzs  r�test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none�s<��J��(�(�����F�H����	
�����'rc�z�tjtjddgdd��}|j	d|�y)Nrr�T)r��text�XXr�rzs  r�!test_check_output_input_none_textz1ProcessTestCase.test_check_output_input_none_text�s;���(�(�����F�H���'��	
����v�&rc�z�tjtjddgdd��}|j	d|�y)Nrr�T)r��universal_newlinesr�r�rzs  r�/test_check_output_input_none_universal_newlinesz?ProcessTestCase.test_check_output_input_none_universal_newlines�s;���(�(�����F�H��t�5��	
����v�&rc�|�tjtjddgddd��}|j	d|�y)Nrzprint('foo')�utf-8�ignore)r��encoding�errors�foor�rzs  r�,test_check_output_input_none_encoding_errorsz<ProcessTestCase.test_check_output_input_none_encoding_errors�s7���(�(�����~�6��W�X�?��	
�
�
�e�V�$rc�8�|jt�5}tjtj
ddgtj��}|jd�ddd�|jdjjd�y#1swY�3xYw)Nr�print('will not be run')rsz-Expected ValueError when stdout arg supplied.rBr)rbryrrvrWrXrB�failrwrkr:�r%rmr{s   r�test_check_output_stdout_argz,ProcessTestCase.test_check_output_stdout_arg�s��
�
�
�z�
*�	G�a��,�,��^�^�T�+E�F��:�:�'�F�
�I�I�E�F�		G�
	
�
�
�h���� 0� 0�� 3�4�	G�	G�s�AB�Bc��tj�}|j|j�|j	d�|jd�|j
t�5}tjtjddg|d��}|jd�ddd�|jdjjd�|jd	|jjd�y#1swY�\xYw)
Nr�rrr��hare�rAr��7Expected ValueError when stdin and input args supplied.rAr�)r�r�r�rIr�r�rbryrrvrWrXr�rwrkr:�r%r�rmr{s    r�&test_check_output_stdin_with_input_argz6ProcessTestCase.test_check_output_stdin_with_input_args���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�
*�	Q�a��,�,��^�^�T�+E�F��G�-�F�
�I�I�O�P�		Q�
	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�
	Q�	Q�s�';C=�=D�walltimec�*�|jtj�5}tjtj
ddgd��}|j
d�ddd�|jjjd�y#1swY�0xYw)Nr�Mimport sys, time
sys.stdout.write('BDFL')
sys.stdout.flush()
time.sleep(3600)�r`zExpected TimeoutExpired.rr)
rbrrcrvrWrXr�rYrkr{r�s   r�test_check_output_timeoutz)ProcessTestCase.test_check_output_timeouts����
�
�z�8�8�
9�
	2�Q��,�,��^�^�T�(�)���F�
�I�I�0�1�
	2�	
������+�+�W�5�
	2�
	2�s�:B	�	Bc��tjj�}d|d<tjt
jddg|��}|j|d�y)N�banana�FRUITrz5import sys, os;sys.exit(os.getenv("FRUIT")=="banana")��env�)r�environ�copyrrVrWrXrY)r%�newenvr[s   r�test_call_kwargsz ProcessTestCase.test_call_kwargs sT�������"��"��w��
�_�_�c�n�n�d�G�H�"(�)��	
����Q�rc��tj�5}|jttj
d��tj
jjj}dg|dzz}|jttj
g|���ddd�|jj�d�y#1swY�*xYw)Nr�)�invalid_arg_namerr)r�captured_stderrrb�	TypeErrorrrD�__init__�__code__�co_argcountrY�getvalue)r%�s�argcount�
too_many_argss    r�test_invalid_argsz!ProcessTestCase.test_invalid_args*s����
$�
$�
&�	K�!����i��)9�)9�A��N�!�'�'�0�0�9�9�E�E�H��C�8�a�<�0�M��D���i��)9�)9�J�M�J�		K�
	
�������r�*�	K�	K�s�BC�Cc�z�tjtjddgtjtj��}|j|jj�|j|jj�|j�|j|jd�y)Nr�print("banana")�rBrC)rrDrWrXrEr�rBrIrCr*rYrArJs  r�test_stdin_nonezProcessTestCase.test_stdin_none4ss�����c�n�n�d�4E�F� *���
���
I����������'���������'�	����������$�'rc���d}tjtjd|gtjtj��}|j|jj�|j|jj�|j�\}}|j|jd|�|j|j�d�y)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�
rrDrWrXrEr�rBrIrC�communicaterYr�rstrip�r%�coderK�out�errs     r�test_stdout_nonez ProcessTestCase.test_stdout_none=s���5��
���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���S�������q�#�.��������':�;rc�z�tjtjddgtjtj��}|j|jj�|j|jj�|j�|j|jd�y)Nrr��rArB)rrDrWrXrEr�rBrIrAr*rYrCrJs  r�test_stderr_nonez ProcessTestCase.test_stderr_noneTss�����c�n�n�d�4E�F�)���z���
H����������'�������
�
�&�	����������4�(rc��|dgz}tj|fi|��}|j�|jd|j�y�NrSrT)rrDr*rYr)r%�pre_argsr;r:rKs     r�_assert_pythonzProcessTestCase._assert_python]sD���5�6�6�����T�,�V�,��	��������Q�\�\�*rc���tjjtjjtj
�d�}|j
|dgtj
��y�N�doesnotexistr�rX)r�path�join�dirnamerWrXr��r%r�s  r�test_executablezProcessTestCase.test_executableesH���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�S�^�^��Lrc��tjjtjjtj
�d�}|j
|dgtjtj
���yr�)rr�r�r�rWrXr��fsencoder�s  r�test_bytes_executablez%ProcessTestCase.test_bytes_executablepsU���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�')�{�{�3�>�>�'B�	�	Drc���tjjtjjtj
�d�}|j
|dgttj
���yr�)rr�r�r�rWrXr�r
r�s  r�test_pathlike_executablez(ProcessTestCase.test_pathlike_executablevsQ���w�w�|�|�B�G�G�O�O�C�N�N�$C�$2�4�����\�4�0�'/����'?�	�	Arc��tjdg}|j|�|jt|j|t
d��y)Nrrr�)rWrXr�rb�NONEXISTING_ERRORS�NONEXISTING_CMD)r%r�s  r� test_executable_takes_precedencez0ProcessTestCase.test_executable_takes_precedence|sI���N�N�D�)�����H�%����,��-�-�x�%4�Q�%7�	�	9rz"executable argument replaces shellc�H�|jgtjd��y�NT)rX�shell)r�rWrXr$s r�test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell�s��	
���B�3�>�>���Frc�n�|jgtjtj�d��yr�)r�rr�rWrXr$s r�$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell�s)�����B�2�;�;�s�~�~�+F�"&�	�	(rc�Z�|jgttj�d��yr�)r�r
rWrXr$s r�'test_pathlike_executable_replaces_shellz7ProcessTestCase.test_pathlike_executable_replaces_shell�s%�����B�8�C�N�N�+C�"&�	�	(rc��tj|�5tj�cddd�S#1swYyxYwr")r�
change_cwdr�getcwd)r%�cwds  r�_normalize_cwdzProcessTestCase._normalize_cwd�s0���
!�
!�#�
&�	��9�9�;�	�	�	�s�4�=c��tjjtj�}tjj|�Sr")rr��realpathrWrX�split)r%�python_paths  r�_split_python_pathz"ProcessTestCase._split_python_path�s-���g�g�&�&�s�~�~�6���w�w�}�}�[�)�)rc��tj|ddgfdtji|��}|j|jj
�|j
�|jd|j�tjj}|j||�||jj�j���y)Nrzcimport os, sys; buf = sys.stdout.buffer; buf.write(os.getcwd().encode()); buf.flush(); sys.exit(47)rBrT)rrDrEr�rBrIr*rYrrr��normcase�read�decode)r%�expected_cwd�
python_argr;rKrs      r�_assert_cwdzProcessTestCase._assert_cwd�s���
���j�$�-�.�
(�&0�_�_�

(�!'�
(��	
��������'�	��������Q�\�\�*��7�7�#�#������,�/�!�!�(�(�-�-�/�"8�"8�":�;�	=rc��tj�}|j|�}|j|tj
|��y�N�r)r��
gettempdirrr
rWrX�r%�temp_dirs  r�test_cwdzProcessTestCase.test_cwd�s9���&�&�(���&�&�x�0������3�>�>�x��@rc��tj�}|j|�}|j|tj
t
j|���yr)r�rrr
rWrXrr�rs  r�test_cwd_with_bytesz#ProcessTestCase.test_cwd_with_bytes�sB���&�&�(���&�&�x�0������3�>�>�r�{�{�8�7L��Mrc��tj�}|j|�}|j|tj
t
|���yr)r�rrr
rWrXr
rs  r�test_cwd_with_pathlikez&ProcessTestCase.test_cwd_with_pathlike�s>���&�&�(���&�&�x�0������3�>�>�x��7I��Jrz"pending resolution of issue #15533c��|j�\}}tjjtj|�}tj�5}|jttj|g�|jttj|g|��|j|�}|j|||��ddd�y#1swYyxYwr�
rrr�r��curdirr�temp_cwdrb�FileNotFoundErrorrrDrr
)r%�
python_dir�python_base�
rel_python�	wrong_dirs     r�test_cwd_with_relative_argz*ProcessTestCase.test_cwd_with_relative_arg�s���#'�"9�"9�";��
�K��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�	E�Y�
���/��1A�1A�)�l�
,����/��1A�1A�)�l�	�
�
;��,�,�Z�8�J����Z����D�	E�	E�	E�s
�A4C�Cc���|j�\}}tjjtj|�}d}tj�5}|jttj|g|��|jttj|g||��|j|�}|j||||��ddd�y#1swYyxYw)N�somethingyoudonthaver��rXrr)r%rrr �doesntexistr!s      r�!test_cwd_with_relative_executablez1ProcessTestCase.test_cwd_with_relative_executable�s���#'�"9�"9�";��
�K��W�W�\�\�"�)�)�[�9�
�,��
�
�
�
!�
	-�Y�
���/��1A�1A�*�m�
�
�
D����/��1A�1A�*�m�
�"+�
�
-��,�,�Z�8�J����Z���!+�
�
-�
	-�
	-�
	-�s
�A8C�C"c��|j�\}}tjj||�}tjjtj|�}tj�5}|jttj|g|��|j|�}|j|||��ddd�y#1swYyxYwr)
rrr�r�rrrrbrrrDrr
)r%rr�
abs_pythonr r!s      r�test_cwd_with_absolute_argz*ProcessTestCase.test_cwd_with_absolute_arg�s���#'�"9�"9�";��
�K��W�W�\�\�*�k�:�
��W�W�\�\�"�)�)�[�9�
�
�
�
�
!�	C�Y�
���/��1A�1A�)�l�	�
�
;��+�+�I�6�I����Y�
�	��B�
	C�	C�	C�s
�6AC
�
CzTest is not venv-compatiblec��|j�\}}|j|�}|j|dtj|��y)Nr$r%)rrr
rWrX)r%rrs   r�test_executable_with_cwdz(ProcessTestCase.test_executable_with_cwd�sI��#'�"9�"9�";��
�K��(�(��4�
�����%;�$'�N�N�
�	�	Drz#need an installed Python. See #7774c�l�|jtj�dtj��y)Nr$r�)r
rr�rWrXr$s r�test_executable_without_cwdz+ProcessTestCase.test_executable_without_cwds)��	
�������&<�$'�N�N�	�	4rc�2�tjtjddgtj��}|j
j
d�|j
j�|j�|j|jd�y)Nr�0import sys; sys.exit(sys.stdin.read() == "pear")r�r�r�)rrDrWrXrErAr�rIr*rYrrJs  r�test_stdin_pipezProcessTestCase.test_stdin_pipesf�����c�n�n�d�K�M�(�o�o�
/��	
���
�
�g��	���
�
��	����������q�)rc��tj�}|j|j�|j	�}tj|d�tj|dd�tjtjddg|��}|j�|j|jd�y�Nr�rrr0r�r�)r�r�r�rI�filenorr��lseekrrDrWrXr*rYr�r%r��drKs    r�test_stdin_filedesz"ProcessTestCase.test_stdin_filedess���
�
#�
#�
%��������!��I�I�K��
����G��
����A�q�����c�n�n�d�K�M� �
"��	
����������q�)rc�N�tj�}|j|j�|j	d�|jd�t
jtjddg|��}|j�|j|jd�yr3)
r�r�r�rIr�r�rrDrWrXr*rYr�r%r�rKs   r�test_stdin_fileobjz"ProcessTestCase.test_stdin_fileobj"sz��
�
#�
#�
%��������!�
�����
����
����c�n�n�d�K�M�!�
#��	
����������q�)rc���tjtjddgtj��}|5|j|jj�d�ddd�y#1swYyxYw)Nr�&import sys; sys.stdout.write("orange")rs�orange�rrDrWrXrErYrBr	rJs  r�test_stdout_pipez ProcessTestCase.test_stdout_pipe.s^�����c�n�n�d�B�D� *���
1���	9����Q�X�X�]�]�_�i�8�	9�	9�	9���+A-�-A6c�l�tj�}|j|j�|j	�}tjtjddg|��}|j�tj|dd�|jtj|d�d�y)Nrr=rsr�r>�r�r�r�rIr4rrDrWrXr*rr5rYr	r6s    r�test_stdout_filedesz#ProcessTestCase.test_stdout_filedes6s���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�B�D� !�
#��	
����
����A�q���������D�)�9�5rc�4�tj�}|j|j�t	j
tjddg|��}|j�|jd�|j|j�d�y)Nrr=rsrr>�r�r�r�rIrrDrWrXr*r�rYr	r:s   r�test_stdout_fileobjz#ProcessTestCase.test_stdout_fileobjBsp��
�
#�
#�
%��������!����c�n�n�d�B�D� "�
$��	
����
����
��������I�.rc���tjtjddgtj��}|5|j|jj�d�ddd�y#1swYyxYw)Nr�*import sys; sys.stderr.write("strawberry")r��
strawberry)rrDrWrXrErYrCr	rJs  r�test_stderr_pipez ProcessTestCase.test_stderr_pipeMs^�����c�n�n�d�F�H� *���
1���	=����Q�X�X�]�]�_�m�<�	=�	=�	=�rAc�l�tj�}|j|j�|j	�}tjtjddg|��}|j�tj|dd�|jtj|d�d�y)NrrJr�rrCrKrDr6s    r�test_stderr_filedesz#ProcessTestCase.test_stderr_filedesUs���
�
#�
#�
%��������!��I�I�K�����c�n�n�d�F�H� !�
#��	
����
����A�q���������D�)�=�9rc�4�tj�}|j|j�t	j
tjddg|��}|j�|jd�|j|j�d�y)NrrJr�rrKrGr:s   r�test_stderr_fileobjz#ProcessTestCase.test_stderr_fileobjasp��
�
#�
#�
%��������!����c�n�n�d�F�H� "�
$��	
����
����
��������M�2rc�4�tjtjddgtjtj��}|j�\}}|j
|d�|j
|d�|j
|jd�y)Nrz�import sys, subprocess;rc = subprocess.call([sys.executable, "-c",    "import sys;"    "sys.stderr.write('42')"],    stderr=subprocess.STDOUT);sys.exit(rc)r�s42rr�rrDrWrXrEr�rYr�r%rKrBrCs    r�,test_stderr_redirect_with_no_stdout_redirectz<ProcessTestCase.test_stderr_redirect_with_no_stdout_redirectls{��
���c�n�n�d�-�.�%/�O�O�$.�O�O�
5��������������'������%�������q�)rc��tjtjddgtjtj
��}|5|j
|jj�d�ddd�y#1swYyxYw)Nr�Rimport sys;sys.stdout.write("apple");sys.stdout.flush();sys.stderr.write("orange")r��appleorange)	rrDrWrXrEr�rYrBr	rJs  r�test_stdout_stderr_pipez'ProcessTestCase.test_stdout_stderr_pipe�sj�����c�n�n�d�;�<�
%/�O�O�$.�$5�$5�

7���	>����Q�X�X�]�]�_�n�=�	>�	>�	>�s�+A<�<Bc�6�tj�}|j|j�t	j
tjddg||��}|j�|jd�|j|j�d�y)NrrVr�rrWrGr:s   r�test_stdout_stderr_filez'ProcessTestCase.test_stdout_stderr_file�sv��
�
#�
#�
%��������!����c�n�n�d�;�<�
%'�$&�

(��	
����
����
��������N�3rc���d}tjtjd|gtjtj��}|j|jj�|j|jj�|j�\}}|j|jd|�|j|j�d�y)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_stdoutz-ProcessTestCase.test_stdout_filedes_of_stdout�s���"��

���c�n�n�d�D�9�$.�O�O�J�O�O�
M����������'���������'��=�=�?���S�������q�#�.��������'<�=rc���tjtjddgtj��}|j�|j
|jd�y)Nrz'for i in range(10240):print("x" * 1024)rs)rrDrWrX�DEVNULLr*rYrBrJs  r�test_stdout_devnullz#ProcessTestCase.test_stdout_devnull�sN�����c�n�n�d�2�3�&0�%7�%7�
9��	
����������4�(rc���tjtjddgtj��}|j�|j
|jd�y)Nrz=import sys
for i in range(10240):sys.stderr.write("x" * 1024)r�)rrDrWrXr^r*rYrCrJs  r�test_stderr_devnullz#ProcessTestCase.test_stderr_devnull�sN�����c�n�n�d�=�>�&0�%7�%7�	
9��
	
����������4�(rc���tjtjddgtj��}|j�|j
|jd�y)Nrzimport sys;sys.stdin.read(1)r�)rrDrWrXr^r*rYrArJs  r�test_stdin_devnullz"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�p�tj�\}}	tj|tj�}tj|�tj|�|dz}tj�}||krtjd��tjtjddgtjtjtj|��}	|j|j|j fD]D}|j#tj|j%�tj�|��F|jj'd�|jj	�|jj	�|j j	�|j)�|j+�y#tj|�tj|�wxYw#|j)�|j+�wxYw)N�z+default pipesize too small to perform test.r�Qimport sys; sys.stdin.read(); sys.stdout.write("out"); sys.stderr.write("error!")�rArBrC�pipesizer�)r�pipe�fcntlrdrIr�get_pagesize�unittest�SkipTestrrDrWrXrErArBrCrYr4r��killr*)r%�test_pipe_r�test_pipe_w�pipesize_defaultri�pagesize_defaultrK�fifos        r�test_pipesizeszProcessTestCase.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���
�
�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$�0CH�$,H�"H5c�d�tjtjddgtjtjtjd��}|5	tj�\}}	tj|tj�}tj|tj�}tj|�tj|�|jtj|jj�tj�|�|jtj|jj�tj�|�|jtj|jj�tj�|�|j�	ddd�y#tj|�tj|�wxYw#|j�wxYw#1swYyxYw)Nrrg���rh)rrDrWrXrErrjrkrdrIrYrAr4rBrCro)r%�proc�fp_r�fp_w�default_read_pipesize�default_write_pipesizes      r�test_pipesize_defaultz%ProcessTestCase.test_pipesize_default�s������
�^�^�T�*�
+��/�/�*�/�/��?�?�R�1���	�
��W�W�Y�
��d�#�,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�*�,��	�	��-	�	���H�H�T�N��H�H�T�N���	�	���-	�	�s>�H&�H�2AG"�:DH�H&�",H�H�H#�#H&�&H/c�,�tjj�}d|d<tjt
jddgtj|��5}|j�\}}|j|d�ddd�y#1swYyxYw)N�oranger�r�2import sys,os;sys.stdout.write(os.getenv("FRUIT"))�rBr�r>)
rr�r�rrDrWrXrEr�rY�r%r�rKrBrCs     r�test_envzProcessTestCase.test_envs��������"��"��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�	0�./��]�]�_�N�F�F����V�Y�/�
	0�	0�	0�s�&B
�
BrzWindows only issuec�H�tjj�}d|d<d|d<d|d<d|d<tjgd	�tj
|�
�5}|j
�\}}|j|j�d�ddd�y#1swYyxYw)N�cherry�fRUit�lemon�fruitrr�r��frUit��CMDz/c�SETr�r�sfrUit=banana)	rr�r�rrDrEr�rY�strip)r%r�rKrB�_s     r�test_win32_duplicate_envsz)ProcessTestCase.test_win32_duplicate_envss��������"��"��w��!��w��"��w��"��w��
�
�
�;�%/�_�_�"(�*�	>�-.��
�
��I�F�A����V�\�\�^�_�=�		>�	>�	>�s�4B�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��	d�}tjtjddgtji��5}|j�\}}t
|j��}|j|t�|D�cgc]}||�s|��}}|j|g�ddd�ycc}w#1swYyxYw)Nc�Z�	d|vxs%d|vxs|dk(xs|jd�xs|dk(S)N�	VERSIONER�__CF�
LD_PRELOAD�SANDBOX�LC_CTYPE)�
startswith)�ns r�is_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore3sI��L� �1�$�$��!��$���%�$�)*���i�)@�$���O�
%rrz)import os; print(list(os.environ.keys()))r�)rrDrWrXrEr��evalr�rF�listrY)r%r�rKrBrC�child_env_names�ks       r�test_empty_envzProcessTestCase.test_empty_env)s���	:�	%��
�
�s�~�~�t�J�L�%/�_�_�"�>�	2�AB��]�]�_�N�F�F�"�6�<�<�>�2�O��!�!�/�4�8�*9�?�Q�&:�1�&=� !�?�O�?����_�b�1�	2�	2��?�
	2�	2�s�AB6�B1�B6�1B6�6B?zLThe Python shared library cannot be loaded without some system environments.c�:�ddi}tjddg}tjdk(rgd�}tj|tj
tj
|��5}|j
�\}}|jrHtjr8td|jd	d
��td|jd	d
��|j|jd�|j|j�d
�ddd�y#1swYyxYw)Nr�rrz;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))rr�)rBrCr�zSTDOUT:�ascii�replacezSTDERR:rsfruit=orange)rWrX�platformrrDrEr�rr�verbose�printr
rYr�)r%r��cmdrKrBrCs      r�test_one_environment_variablez-ProcessTestCase.test_one_environment_variableFs����8�$���~�~�t� O�P���<�<�7�"�/�C�
�
�
�c�*�/�/�*�/�/�W]�
^�	>�bc��]�]�_�N�F�F��|�|�����i����w�	�!B�C��i����w�	�!B�C����Q�\�\�1�-����V�\�\�^�_�=�
	>�	>�	>�s
�$B$D�Dc�N�tjdz}|jt�5t	j
|ddg�ddd�|jt�5t	j
tjddg�ddd�y#1swY�NxYw#1swYyxYw)N�rrzpass#)rWrXrbryrrD)r%r�s  r�test_invalid_cmdz ProcessTestCase.test_invalid_cmdZs����n�n�t�#��
�
�
�z�
*�	2����c�4��0�1�	2��
�
�z�
*�	@����c�n�n�d�I�>�?�	@�	@�		2�	2��	@�	@�s�B�'B�B�B$c��tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<tjtjd	d
gt
j|��5}|j�\}}|j|d�ddd�y#1swY��KxYw#1swY��xYw#1swY��xYw#1swYyxYw)
N�cabbagezFRUITVEGETABLEr�zorangeVEGETABLE=cabbager�r�zFRUIT=ORANGEzorange=lemonrz3import sys, os;sys.stdout.write(os.getenv("FRUIT"))r�sorange=lemon)
rr�r�rbryrrDrrWrXrEr�rYr�s     r�test_invalid_envz ProcessTestCase.test_invalid_envdst�������"��%.��!�"�
�
�
�z�
*�	:����_�&�9�	:������"��5��w��
�
�
�z�
*�	:����_�&�9�	:������"��!(��~��
�
�
�z�
*�	:����_�&�9�	:������"��(��w��
�
�
�s�~�~�t� F�G�&0�_�_�"(�	*�	6�./��]�]�_�N�F�F����V�_�5�
	6�	6�%	:�	:��	:�	:��	:�	:��	6�	6�s/�F�F+�1F7�/&G�F(�+F4�7G�Gc��tjj�}d|d<|jt�5tjt|��ddd�tjj�}d|d<|jt�5tjt|��ddd�y#1swY�fxYw#1swYyxYw)Nr�zFRUIT=VEGETABLEr�z==FRUIT)rr�r�rbryrrDr)r%r�s  r�test_win32_invalid_envz&ProcessTestCase.test_win32_invalid_env�s��������"��$-�� �!�
�
�
�z�
*�	:����_�&�9�	:������"��%��y��
�
�
�z�
*�	:����_�&�9�	:�	:�	:�	:��
	:�	:�s�B:�C�:C�Cc���tjtjddgtj��}|jd�|j
|jd�y)Nrz/import sys;sys.exit(sys.stdin.read() == "pear")r�r�r�rRrJs  r�test_communicate_stdinz&ProcessTestCase.test_communicate_stdin�sQ�����c�n�n�d�E�F�$.�?�?�
4��	
�
�
�g��������q�)rc���tjtjddgtj��}|j�\}}|j
|d�|j
|d�y)Nrz)import sys; sys.stdout.write("pineapple")rs�	pineapple�rrDrWrXrEr�rYrSs    r�test_communicate_stdoutz'ProcessTestCase.test_communicate_stdout�s\�����c�n�n�d�I�K�$.�O�O�
5���=�=�?���������.������&rc���tjtjddgtj��}|j�\}}|j
|d�|j
|d�y)Nrz)import sys; sys.stderr.write("pineapple")r�r�r�rSs    r�test_communicate_stderrz'ProcessTestCase.test_communicate_stderr�s\�����c�n�n�d�I�K�$.�O�O�
5���=�=�?���������&������.rc��tjtjddgtjtjtj��}|j|jj�|j|jj�|j|jj�|jd�\}}|j|d�|j|d�y)NrzNimport sys,os;sys.stderr.write("pineapple");sys.stdout.write(sys.stdin.read())r@�bananar�)rrDrWrXrEr�rBrIrCrAr�rYrSs    r�test_communicatez ProcessTestCase.test_communicate�s������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�

5��	
��������'���������'�������
�
�&��=�=��3���������+������.rc��tjtjddgdtjtjtj��}|jtj|jdd��|j�\}}|j|d�|j|j�d�y)	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�rArBrCr�g333333�?r`spineapple
pear
)
rrDrWrXrErbrcr�rY�encoderSs    r�test_communicate_timeoutz(ProcessTestCase.test_communicate_timeout�s������c�n�n�d�C�D�15�#-�?�?�$.�O�O�$.�O�O�	
5��	
���*�3�3�Q�]�]�H�"%�	�	'��=�=�?���������*��������*>�?rc�$�tjtjddgtj��}|jtj|jd��|j�\}}|jt|�d�y)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));rsg�������?r`i)
rrDrWrXrErbrcr�rY�len)r%rKrBr�s    r�%test_communicate_timeout_large_outputz5ProcessTestCase.test_communicate_timeout_large_output�ss�����c�n�n�d�E�F�%/�O�O�	
5��	
���*�3�3�Q�]�]�C��P��m�m�o��������V��m�4rc�>�dD�]}dD�]}dD�]}i}|rtj|d<|rtj|d<|rtj|d<|s�Htjtfi|��}|j	�|j
�%|j
|j
j�|j�%|j
|jj�|j���|j
|jj�������y)N�FTrArBrC)
rrErDrr�rA�
assertTrue�closedrBrC)r%�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrKs      r�test_communicate_pipe_fd_leakz-ProcessTestCase.test_communicate_pipe_fd_leak�s���'�	9�J�,�
9��#0�9�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�#9�
9�	9rc��tjtjddg�}|j	�\}}|j|d�|j|d�y)NrrS)rrDrWrXr�rYrSs    r�test_communicate_returnsz(ProcessTestCase.test_communicate_returns�sR�����c�n�n�d�8�:�
;���=�=�?���������&������&rc��tj�\}}tj|�tj|�tjt
jddtjzgtjtjtj��}|j|jj�|j|jj�|j|jj�dtjz}|j|�\}}|j||�y)Nrzpimport sys,os;sys.stdout.write(sys.stdin.read(47));sys.stderr.write("x" * %d);sys.stdout.write(sys.stdin.read())r@�a)rrjrIrrDrWrXr�
PIPE_MAX_SIZErEr�rBrCrAr�rY)r%�x�yrK�string_to_writerBrCs       r�test_communicate_pipe_bufz)ProcessTestCase.test_communicate_pipe_buf�s����w�w�y���1�
�����
��������c�n�n�d�C�&�3�3�	4�5�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&���!6�!6�6���=�=��9���������1rc�0�tjtjddgtjtjtj��}|j|jj�|j|jj�|j|jj�|jjd�|jd�\}}|j|d�|j|d�y)Nrz0import sys,os;sys.stdout.write(sys.stdin.read())r@r�ssplitsbananasplitr)
rrDrWrXrEr�rBrIrCrAr�r�rYrSs    r�test_writes_before_communicatez.ProcessTestCase.test_writes_before_communicates������c�n�n�d�C�D�$.�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	���
�
�i� ��=�=��2���������0������%rc�`�tjddtzdzg}dD�]~}tj|fidtj
dtj
|di��}|5|jjd�|jj�|j|jj�d�|jjd	�|jj�|j|jj�|j|jj�d
�|j|jjd�d	�|j|jj�d�ddd����y#1swY���xYw)
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�rArBTzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rWrX�	SETBINARYrrDrErAr��flushrYrB�readlinerIr�r	)r%r:�extra_kwargrKs    r� test_universal_newlines_and_textz0ProcessTestCase.test_universal_newlines_and_textsV���N�N�D��y�(�
&�
&�'��(:�	F�K�� � ��>�'�:�?�?�*2�J�O�O�*5�t�*=�>�A��
F����
�
�i�(����
�
��� � ����!2�!2�!4�i�@����
�
�i�(����
�
����������/�� � ����!2�!2�!4�!*�,�� � ������q�!1�!*�,�� � �������!D�F�
F�
F�		F�
F�
F�s
�D9F#�#F-	c��tjtjddtzdzgtj
tj
d��}|j
|jj�|j
|jj�|j�\}}|j|d�y)Nrr�z�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�)rCrBr�z#line2
line4
line5
line6
line7
line8)rrDrWrXr�rEr�rBrIrCr�rYrSs    r�#test_universal_newlines_communicatez3ProcessTestCase.test_universal_newlines_communicateFs������c�n�n�d�.��:�8�8�
9�%/�O�O�$.�O�O�01�!
3��"	
��������'���������'��=�=�?��������C�	Erc��tjtjddtztjd�zgtjd��}|jd�\}}|j|jd�y)Nrr�a
                               s = sys.stdin.readline()
                               assert s == "line1\n", repr(s)
                               s = sys.stdin.read()
                               assert s == "line3\n", repr(s)
                              r�)rAr��line1
line3
r)rrDrWrXr��textwrap�dedentrEr�rYrrSs    r�)test_universal_newlines_communicate_stdinz9ProcessTestCase.test_universal_newlines_communicate_stdin_ss�����c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�01�
3���=�=�)9�:����������q�)rc���tjttjtjd��}|j	�|j|jd�y)NT)rArBr�r)rrDrrEr�rYrrJs  r�.test_universal_newlines_communicate_input_nonez>ProcessTestCase.test_universal_newlines_communicate_input_nonemsF��

���_�#-�?�?�$.�O�O�04�
6��	
�
�
��������q�)rc�@�tjtjddtztjd�zgtjtjtjd��}|j|jj�|j|jj�|jd�\}}|j|jd�|jd|�|j|j!d	��y)
Nrr�a�
                               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)rArCrBr�r�rzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrDrWrXr�r�r�rEr�rBrIrCr�rYrr�r�rSs    r�7test_universal_newlines_communicate_stdin_stdout_stderrzGProcessTestCase.test_universal_newlines_communicate_stdin_stdout_stderrys������c�n�n�d�.��:�X�_�_�N"�>#�#�$�$.�?�?�$.�O�O�$.�O�O�04�!
6��"	
��������'���������'��=�=�)9�:����������q�)����>��G�	
����)�)�*D�E�Frc��dD]v}d|z}tjd|g}tj|tjtj|��}|jd��\}}|j
|d��xy)N)zutf-16z	utf-32-bez@import sys; sys.stdout.buffer.write('1\r\n2\r3\n4'.encode('%s'))r)rArBr�rr�z1
2
3
4)rWrXrrDrEr�rY)r%r�r�r:�popenrBrCs       r�-test_universal_newlines_communicate_encodingsz=ProcessTestCase.test_universal_newlines_communicate_encodings�s���0�
	3�H�L���D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.6�8�E�#�.�.�R�.�8�N�F�F����V�\�2�
	3rc��dD]�\}}d}tjd|g}tj|tjtjd|��}|jd��\}}|j
|dj|����y)	N))r�r)r�u��)�surrogateescapeu��)�backslashreplacez\x80\x80z2import sys; sys.stdout.buffer.write(b'[\x80\x80]')rr�)rArBr�r�rr�z[{}])rWrXrrDrEr�rY�format)r%r��expectedr�r:r�rBrCs        r�test_communicate_errorsz'ProcessTestCase.test_communicate_errors�s���!
�	>��F�H�>�D��N�N�D�$�/�D��$�$�T�+5�?�?�,6�O�O�.5�,2�	4�E�
#�.�.�R�.�8�N�F�F����V�V�]�]�8�%<�=�%	>rc�,�tsd}nd}g}tj�}	t|�D]u}	tj
j
|tj�}|jt	j|tjtjz���w|j!d|z�td�D]%}t	j"|j%���'td�D]|}t'j(t*j,ddgt&j.t&j.t&j.��}|j1d	�d
}|j3|d	��~	|D]}	t	j"|	��t5j6|�y#t$r*}|jtjk7r�Yd}~��d}~wwxYw#|D]}	t	j"|	��t5j6|�wxYw)Niiz4failed to reach the file descriptor limit (tried %d)�
�rz-import sys;sys.stdout.write(sys.stdin.read())r@slimer)r(r��mkdtemp�rangerr�r�r�TESTFN�append�open�O_WRONLY�O_CREAT�OSError�errno�EMFILE�skipTestrI�poprrDrWrXrEr�rYr�rmtree)
r%�max_handles�handles�tmpdir�i�tmpfile�erK�data�hs
          r�test_no_leakingzProcessTestCase.test_no_leaking�s�����K��K����!�!�#��	"��;�'�

0��� �g�g�l�l�6�9�3C�3C�D�G��N�N�2�7�7�7�B�K�K��
�
�4J�#K�L�

0��
�
�!�#.�/�0��2�Y�
(���������'�
(��2�Y�
0���$�$�c�n�n�d�'K�&L�,6�?�?�,6�O�O�,6�O�O�=���}�}�W�-�a�0��� � ��w�/�
0��
�������
��M�M�&�!��1���w�w�%�,�,�.������,�
�������
��M�M�&�!�s6�G �A2F*�$CG �*	G�3G�G �G�G � 3Hc�t�|jtjgd��d�|jtjgd��d�|jtjgd��d�|jtjgd��d�|jtjgd	��d
�|jtjgd��d�|jtjgd
��d�|jtjddg�d�y)N)za b cr7rz"a b c" d e)�ab"c�\r7z	ab\"c \ d)rz \r7z
ab\"c " \\" d)za\\\bzde fgr	za\\\b "de fg" h)za\"brmr7z
a\\\"b c d)za\\b cr7rz"a\\b c" d e)za\\b\ cr7rz
"a\\b\ c" d e�abrzab "")rYr�list2cmdliner$s r�test_list2cmdlinez!ProcessTestCase.test_list2cmdline�s�������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��tjtjddgtj��}|j|jj�|j|j��tj|jj�d�|j�|j|j�d�y)Nrzimport os; os.read(0, 1)r��Ar)rrDrWrXrEr�rArI�assertIsNone�pollrr�r4r*rYrJs  r�	test_pollzProcessTestCase.test_poll�s������c�n�n�d�8�:�#-�?�?�
4��	
������
�
�&����!�&�&�(�#�
��������!�4�(�	�����������1�%rc��tjt�}|j|j	�d�|j|j	�d�yrf�rrDrrYr*rJs  r�	test_waitzProcessTestCase.test_waits>�����_�-���������1�%��������1�%rc��tjtjddg�}|j	tj
�5}|j
d��ddd�|jdtj��|j|j
tj��d�y#1swY�_xYw)Nrzimport time; time.sleep(0.3)�-C��6?r`z0.0001r)
rrDrWrXrbrcr*rw�strrkrYr�
SHORT_TIMEOUT)r%rKrms   r�test_wait_timeoutz!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�	#�	#�s�B7�7Cc��|jt�5tjtd�ddd�y#1swYyxYw)Nr)rbr�rrDrr$s r�test_invalid_bufsizez$ProcessTestCase.test_invalid_bufsizes7���
�
�y�
)�	8����_�h�7�	8�	8�	8�s	�:�Ac���tjtd�}|j|j	�d�tjtd��}|j|j	�d�y)Nr)rNrrJs  r�test_bufsize_is_nonez$ProcessTestCase.test_bufsize_is_nonesR�����_�d�3���������1�%����_�d�;���������1�%rc��tjtjddgtjtjtj
d|��5}|jj|�tj|jj��|jj�}tj�5	|jj�ddd�d|_ddd�|j!j"d�|j!|�y#t$rY�QwxYw#1swY�VxYw#1swY�SxYw)NrzDimport sys;sys.stdout.write(sys.stdin.readline());sys.stdout.flush()r�)rArBrCrNr�r)rrDrWrXrEr^rAr�rrIr4rBr�r�SuppressCrashReportr�rYr)r%�liner�r�rK�	read_lines      r�_test_bufsize_equal_onez'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�!	�"	
������q�)�����H�-��	�����
�
��	�	�sC�A7E�D?�D0�*E�0	D<�9D?�;D<�<D?�?E	�E�Ec�0�d}|j||d��y)Nzline
T�r�)r&�r%r$s  r� test_bufsize_equal_one_text_modez0ProcessTestCase.test_bufsize_equal_one_text_mode6s�����$�$�T�4�D�$�Irc���dtjj�z}|jtd�5|j|dd��ddd�y#1swYyxYw)Nslinezline bufferingrFr()r�linesepr��assertWarnsRegex�RuntimeWarningr&r)s  r�"test_bufsize_equal_one_binary_modez2ProcessTestCase.test_bufsize_equal_one_binary_mode<sZ������*�*�,�,��
�
"�
"�>�3C�
D�	N��(�(��s�u�(�M�	N�	N�	N�s�A�A�cpuc���td�D]X}|jt�5tjt
tjtj��ddd��Zy#1swY�exYw)NrCr�)r�rbr�rrDr�rE)r%rs  r�test_leaking_fds_on_errorz)ProcessTestCase.test_leaking_fds_on_errorCs^���t��	9�A��"�"�#5�6�
9�� � ��(2���(2���9�
9�
9�	9�
9�
9�s�9A(�(A1	c���	ddl}|jtjdt�d��}tjd|g}tj|tjd��}|5|j�d}ddd�|jd	�|j|jd�y#ttf$r|j	d�Y��wxYw#1swY�^xYw)
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)rCr�r�r)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorr�r�r�r�rWrXrrDrEr�rYr)r%r4r�r�rxrCs      r�test_nonexisting_with_pipesz+ProcessTestCase.test_nonexisting_with_pipesPs���	:���#�#����$�#�%�&	�	 �
��&�~�~�t�T�*������'1���37�9���	+��%�%�'��*�F�	+������$�������!�,��;��,�	:��M�M�8�9�	:��4	+�	+�s�B5�*C�5 C�C�C$c�z��g��fd�}tj|��}|j�	|jt�5tjtt
jt
jt
j��ddd�|j�d}�D]}	tj|��|�|�y#1swY�=xYw#t$r}|}Yd}~�<d}~wwxYw#|j�d}�D]0}	tj|��#t$r}|}Yd}~�*d}~wwxYw|�|�wxYw)Nc���td�D]:}�jtj��t	j
d��<y)N�g����MbP?)r��extendrrj�time�sleep)r�fdss �r�open_fdsz<ProcessTestCase.test_double_close_on_error.<locals>.open_fds|s4����2�Y�
"���
�
�2�7�7�9�%��
�
�5�!�
"r)�targetr@)
�	threading�Thread�startrb�EnvironmentErrorrrDr�rEr�rrIr�)r%r@�t�exc�fdrr?s      @r�test_double_close_on_errorz*ProcessTestCase.test_double_close_on_errorys"�����	"�
���H�-��	���	�	��"�"�#3�4�
9�� � ��'1���(2���(2���9�
9�
�F�F�H��C��
����H�H�R�L�
����	��!
9�
9�����C����
�F�F�H��C��
����H�H�R�L�����C����

����	��sf�C-�AC	�
C-�-C�	C�C-�	C*�C%�%C*�-D:�D�D:�	D1	�%D,	�'D:�,D1	�1	D:c�*���	tjtjddg��|j	�j
d�g���fd�}t
jd|�}|j�trd}nd}�jtj��|j	�j
|d�	��j�|j	�j
|d
�	�|j�|j	dd|fd
|fg��y)Nrzimport time; time.sleep(12)c����jd�j�f��j��j��jd�jf��j��jd�jf�y)N�thread-start-poll-result�thread-after-kill-and-wait�thread-after-second-wait)r�rror*r)rx�resultss��r�kill_proc_timer_threadzDProcessTestCase.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�Ir皙�����?r�i����r`z*unexpected result in wait from main thread��msgz&unexpected result in second main wait.)rLNrMrN)rrDrWrXrYrrB�TimerrDr(r*rrr�)r%rPrF�expected_errorcoderxrOs    @@r�test_threadsafe_waitz$ProcessTestCase.test_threadsafe_wait�s���M��������!>�!@�A��������$�/���	J�
�O�O�C�!7�8��	���	��!"��"$��
	
�	�	�'�/�/�	�0�������*<�I�	�	K�	
�	�	��������*<�E�	�	G�	
����
	
���<�7�9K�L�5�7I�J�L�!�	"rc���djd�}tjtjd|g�}|j|j
d�t|��y)N�;)zimport subprocess, syszJretcode = subprocess.call([sys.executable, '-c', 'print("Hello World!")'])zassert retcode == 0rsHello World!)r�rrvrWrXr�r�r�)r%r�r{s   r�test_issue8780zProcessTestCase.test_issue8780�sQ���x�x�#�$��
�(�(�#�.�.�$��)E�F������)�)�/�:�E�&�M�Jrc���tj�\}}tj�\}}tj�\}}	tjdg|||��|jt
jj|��|jt
jj|��|jt
jj|��y#t$r�tj|�tj|�tj|�tj|�tj|�tj|�Y��wxYw)N�*r@)r��mkstemprrDr�rrI�remover,r��exists)r%�ifhandle�ifname�ofhandle�ofname�efhandle�efnames       r� test_handles_closed_on_exceptionz0ProcessTestCase.test_handles_closed_on_exception�s��$�+�+�-���&�#�+�+�-���&�#�+�+�-���&�		����s�e�8�H��
�	
���������/�0����������/�0����������/�0���	��H�H�X���I�I�f���H�H�X���I�I�f���H�H�X���I�I�f��
	�s�C,�,BE7�6E7c��tjttjtjtj��}|j	|j
j�|j	|jj�|j	|jj�|jddz�y)Nr@�x�)
rrDrrEr�rBrIrCrAr�rJs  r�test_communicate_epipez&ProcessTestCase.test_communicate_epipe�sw�����_�#-�?�?�$.�O�O�$.�O�O�
5��	
��������'���������'�������
�
�&�	�
�
�d�U�l�#rc
��tjd�}|jj}dddgdddfgd�dddf|dd	d
|�d�fg}tj
jjtjd�5|D]@\}}}}tj||�
�}||_
|jt|�|��B	ddd�y#1swYyxYw)Nz
my-tool.py)�lsT�{z#<Popen: returncode: 123 args: 'ls'>)�daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTrzP<Popen: returncode: 0 args: 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa...>rkFz&<Popen: returncode: None args: ['ls']>)rkz	--my-optsrmzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>�z<Popen: returncode: 7 args: z('my-tool.py')>r<�r�)
�pathlib�Path�	__class__r1rmr�patch�objectrrDrrY�repr)	r%�path_cmd�pathlib_cls�casesr�r�r��sxrKs	         r�	test_reprzProcessTestCase.test_repr�s����<�<��-���(�(�1�1��
E�
a��V�U�D�"J�K�
+�U�D�
_�
a�
�u�a�#?��}�O�!\�]�
���]�]�
 �
 �
'�
'�
�(8�(8�:J�
K�	.�(-�
.�$��U�D�"��$�$�S��6��#���� � ��a��"�-�
.�	.�	.�	.�s
�>AC�Cc���tjttj��}|j	|j
j�|j�|jddz�y)Nr�rgrh)	rrDrrEr�rArIr*r�rJs  r�!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdinsH�����_�#-�?�?�
4��������
�
�&�	����	�
�
�d�U�l�#r�SIGUSR1zRequires signal.SIGUSR1rozRequires os.kill�getppidzRequires os.getppidc�~�d�}tjtj|�}|jtjtj|�tjddg}dD]C}|t
ji}tj|fi|��5}|j�ddd��Ey#1swY�PxYw)Nc��yr"r4)�signum�frames  r�handlerz7ProcessTestCase.test_communicate_eintr.<locals>.handler���rrz7import os, signal;os.kill(os.getppid(), signal.SIGUSR1)r�)	�signalr}r�rWrXrrErDr�)r%r��old_handlerr:�stream�kw�processs       r�test_communicate_eintrz&ProcessTestCase.test_communicate_eintrs���	��m�m�F�N�N�G�<������
�
�v�~�~�{�C�����8�9��+�	&�F��*�/�/�*�B��!�!�$�-�"�-�
&���#�#�%�
&�
&�	&�
&�
&�s�B3�3B<	�/proc/%d/fdzLinux specificc�z�	dtj�z}tj|�}|jt�5tttjtjtj��ddd�tj|�}|j||�y#1swY�1xYw)Nr�r@)
r�getpid�listdirrbr6r8rrrErY)r%�fd_directory�fds_before_popen�fds_after_exceptions    r�!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leak(s���	J�$�r�y�y�{�2���:�:�l�3��
�
�
�1�
2�	D�#�#�:�?�?�%�?�?�:�?�?�
D�	D�!�j�j��6�����)�+>�?�	D�	D�s�>B1�1B:z+behavior currently not supported on Windowsc���|jt�5}tjgd��ddd�|j	j
jd�y#1swY�0xYw)N)�/opt/nonexistent_binary�with�somer:r�)rbrrrVrYrk�filenamerls  r�%test_file_not_found_includes_filenamez5ProcessTestCase.test_file_not_found_includes_filename:sT��
�
�
�0�
1�	Q�Q��O�O�O�P�	Q�������-�-�/H�I�	Q�	Q�s�A�A&c���|jt�5}tjddgd��ddd�|j	j
jd�y#1swY�0xYw)N�exit�0z/some/nonexistent/directoryr)rbrrrDrYrkr�rls  r� test_file_not_found_with_bad_cwdz0ProcessTestCase.test_file_not_found_with_bad_cwd@s\��
�
�
�0�
1�	O�Q����f�c�]�0M�N�	O�������-�-�/L�M�	O�	O�s�A�A(c���|jtjttj
�|jtjttj
�yr")rFrrD�bytes�types�GenericAlias�CompletedProcessrr$s r�test_class_getitemsz#ProcessTestCase.test_class_getitemsFsD�����j�.�.�u�5�u�7I�7I�J����j�9�9�#�>��@R�@R�Sr�
HAVE_VFORKz!vfork() not enabled by configure.�subprocess._fork_execc���|jtj�td�|_|jt�5tjtjddg�ddd�|j�|j|jjd�tjjtdd�5|jt�5tjtjddg�ddd�|j|j djd�ddd�y#1swY��xYw#1swY�IxYw#1swYyxYw)Nzjust testing argsrrrw�
_USE_VFORKF)r�rr��RuntimeError�side_effectrbrrWrX�assert_called_once�	call_argsr:rrsrtr,�call_args_list)r%�mock_fork_execs  r�test__use_vforkzProcessTestCase.test__use_vforkJs��	
���
�-�-�.�%1�2E�%F��"�
�
�
�|�
,�	;��N�N�C�N�N�D�&�9�:�	;��)�)�+�����0�0�5�5�b�9�:�
�Z�Z�
�
�z�<��
?�	I��"�"�<�0�
?��������f�=�>�
?����^�:�:�2�>�C�C�B�G�H�	I�	I�		;�	;��

?�
?��	I�	I�s0�'E
�E"�''E�3E"�
E�E	�E"�"E+N)�r1r2r3rLrPr\rdrhrnr|rr�r�r�r�r�r�r�r�r�r�requires_resourcer�r�r�r�r�r�r�r�r�r�r�rm�skipIfr(r�r�r�rrr
rrrr"r'r*rW�base_prefix�prefixr,�	sysconfig�is_python_buildr.r1r8r;r@rErHrLrNrPrTrXrZr\r_rarc�
skipUnlessrk�hasattrrur}r�r�r��get_config_varrr�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�r
rrrrrr!r&r*r/r2r8rIrVrYrerirzr|r�rr�r��isdirr�r�r�r�r�rrsr�r4rrr>r>ts4����!�'� �
5�5�4�'�
'�'�(�'�'�%�5�4��W���z�*�
6�+�
6� �+�(�<�.)�+�	M�D�A�9��X�_�_�Y� D�E�G�F�G�
�X�_�_�Y� D�E�(�F�(��X�_�_�Y� D�E�(�F�(�
�*�=�&A�N�
K�
�X�_�_�Y� D�E�
E�F�
E��X�_�_�Y� D�E�-�F�-�$C��X�_�_�S�_�_��
�
�2�2�4�D�4�D��X�_�_�S�_�_��
�
�2�2�4��X�_�_�.�Y�.�.�0�:�<�4�<�4�4�*�*�
*�9�
6�	/�=�
:�	3�*�*
>�
4�>�&)�)�(��X����A�7�5�.�#A�@�B�!�B�!�F�X����A�7�5�.�#A�@�B��B��@	0��X�������0�2F�G�
>�H�
>��X�_�_�S�\�\�W�,�:�<��X�_�_�-�Y�-�-�.@�A�Q�F�2�3��X�_�_�_�T�2�@�B�2�B�3�<�2�,�X�_�_�-�Y�-�-�.@�A�Q�F�9�:��X�_�_�_�T�2�@�B�
>�B�:�

>�@�6�<�X�������0�2F�G�
:�H�
:�*�'�/�
/�@�&5�"9�,'�2�.&� %F�NE�2*�
*�G�83�,>�*%"�N"�$	&�&�C�8�&�.�,J�N��W���u�%�
9�&�
9�'-�R�:2"�h	K�1�(	$�.�&$��X������3�2�4��X�����V�,�+�-��X�����Y�/�.�0�&�0�-�4�&�&�X��������}�y�r�y�y�{�'B�C�)�+�@�+�@� �X�_�_�Y� M�N�J�O�J�
�X�_�_�Y� M�N�N�O�N�
T��X�_�_�1��1�1�,�?�?�8�:��T�Z�Z�'�(�
I�)�:�
Irr>c��eZdZd�Zd�Zd�Zd�Zd�Zd�Zd�Z	d�Z
d	�Zd
�Ze
jd�d��Zd
�Zd�Zd�Zd�Zej*ed�d��Zd�Zd�Zd�Zej6ed�d��Zd�Zy)�RunFuncTestCasec�V�	tjd|g}tj|fi|��S)Nr�rWrXrr)r%r�r;�argvs    r�
run_pythonzRunFuncTestCase.run_python[s)��B�����d�+���~�~�d�-�f�-�-rc���|jd�}|j|jd�|jtj
�5|j
�ddd�y#1swYyxYwr�)r�rYrrbrrj�check_returncode�r%�cps  r�test_returncodezRunFuncTestCase.test_returncode`sZ��
�_�_�7�
8���������+�
�
�
�z�<�<�
=�	"����!�	"�	"�	"�s�
A'�'A0c���|jtj�5}|jdd��ddd�|j	j
jd�y#1swY�0xYw)NrSTrtrT)rbrrjr�rYrkrrls  r�
test_checkzRunFuncTestCase.test_checkgs\��
�
�
�z�<�<�
=�	D���O�O�6�d�O�C�	D�������/�/��4�	D�	D�s�A#�#A,c�r�tjtd��}|j|jd�y)NTrtr)rrrrYrr�s  r�test_check_zerozRunFuncTestCase.test_check_zerols&��
�^�^�O�4�
8���������*rc��|jtj�5|jdd��ddd�y#1swYyxYw)Nr^rr`)rbrrcr�r$s r�test_timeoutzRunFuncTestCase.test_timeoutqsB��
�
�
�z�8�8�
9�	@��O�O�.��O�?�	@�	@�	@�s	�=�Ac�~�|jdtj��}|jd|j�y)Nrqrsrr�r�rrErwrBr�s  r�test_capture_stdoutz#RunFuncTestCase.test_capture_stdoutys*��
�_�_�_�Z�_�_�_�
E���
�
�g�r�y�y�)rc�~�|jdtj��}|jd|j�y)Nr�r�rr)r�rrErwrCr�s  r�test_capture_stderrz#RunFuncTestCase.test_capture_stderr~s1��
�_�_�C�$.�O�O��5���
�
�g�r�y�y�)rc�"�tj�}|j|j�|j	d�|jd�|j
d|tj��}|jd|j�y)Nr�rr�r�r�)r�r�r�rIr�r�r�rrErwrB)r%r�r�s   rr�z+RunFuncTestCase.test_check_output_stdin_arg�sj��
�
#�
#�
%��������!�
�����
����
�
�_�_�I������2��	
�
�
�g�r�y�y�)rc��|jddtj��}|jd|j�y)Nr�r�)r�rBr�r�r�s  rr�z+RunFuncTestCase.test_check_output_input_arg�s5��
�_�_�H��j�o�o��7��	
�
�
�g�r�y�y�)rc���tj�}|j|j�|j	d�|jd�|j
td��5}|jd|d��}ddd�|jdjjd�|jd	|jjd�y#1swY�\xYw)
Nr�rr�rRr�r�r�rAr�)r�r�r�rIr�r�rbryr�rwrkr:r�s    rr�z6RunFuncTestCase.test_check_output_stdin_with_input_arg�s���
�
#�
#�
%��������!�
�����
����
�
�
�
�z�K��M�	>�PQ��_�_�%?�+-�W�%�>�F�	>�	
�
�
�g�q�{�{�/�/��2�3��
�
�g�q�{�{�/�/��2�3�	>�	>�s�)C�C"r�c�H�|jtj�5}|jddtj��}ddd�|jjjd�|j|jjd�y#1swY�VxYw)Nr�r�)rarBrr)	rbrrcr�rErYrkr{rB)r%rmr�s   rr�z)RunFuncTestCase.test_check_output_timeout�s���
�
�
�z�8�8�
9�	7�Q����(��j�o�o�!�7�B�	7�	
������+�+�W�5�������+�+�W�5�	7�	7�s�#B�B!c��tjj�}d|d<|jd|��}|j	|j
d�y)Nr�r�zCimport sys, os;sys.exit(33 if os.getenv("FRUIT")=="banana" else 31)r��!)rr�r�r�rYr)r%r�r�s   r�test_run_kwargszRunFuncTestCase.test_run_kwargs�sM�������"��"��w��
�_�_�M�!'��)��	
�������+rc��trdnd}tj|�}|�|j|�d��t	|�}tj|t
j��}|j|jd�|jt�5tj|t
jd��ddd�y#1swYyxYw)Nztree.comrkz required for this testrsrT)rBr�)r(rrr�r
rrr^rYrrbr�)r%�progr��ress    r�test_run_with_pathlike_pathz+RunFuncTestCase.test_run_with_pathlike_path�s���'�z�D���|�|�D�!���<��M�M�T�F�"9�:�;���~���n�n�T�*�*<�*<�=���������+�
�
�
�y�
)�	H��N�N�4�
�(:�(:�$�G�	H�	H�	H�s�'C�Cc��tjtj�}|ddg}t	j
|�}|j
|jd�y)Nrsimport sys; sys.exit(57)�9)rr�rWrXrrrYr�r%r�r:r�s    r�&test_run_with_bytes_path_and_argumentsz6RunFuncTestCase.test_run_with_bytes_path_and_arguments�sC���{�{�3�>�>�*���d�7�8���n�n�T�"���������,rc��ttj�}|ddg}tj|�}|j|jd�y)Nrzimport sys; sys.exit(57)r�)r
rWrXrrrYrr�s    r�)test_run_with_pathlike_path_and_argumentsz9RunFuncTestCase.test_run_with_pathlike_path_and_arguments�s?������'���d�6�7���n�n�T�"���������,rz#Maybe test trigger a leak on Ubuntuc�X�tjddg}tj|i��y)Nrrr�r�)r%r:s  r�test_run_with_an_empty_envz*RunFuncTestCase.test_run_with_an_empty_env�s$������f�-��	���t��$rc��|jdd��}|jd|j�|jd|j�y)Nz>import sys;sys.stdout.write('BDFL'); sys.stderr.write('FLUFL')T��capture_outputrrsFLUFL)r�rwrBrCr�s  r�test_capture_outputz#RunFuncTestCase.test_capture_output�sE��
�_�_�:�-1��2��	
�
�
�g�r�y�y�)��
�
�h��	�	�*rc��tj�}|j|j�|j	t
d��5}|j
dd|��}ddd�|jdjjd�|jd|jjd�y#1swY�\xYw)	NzAExpected ValueError when stdout and capture_output args supplied.rRr�T)r�rBrBrr��
r�r�r�rIrbryr�rwrkr:r�s    r�#test_stdout_with_capture_output_argz3RunFuncTestCase.test_stdout_with_capture_output_arg����
�
#�
#�
%��������!�
�
�
�z�"��$�	F�'(��_�_�%?�59�"�%�F�F�	F�
	
�
�
�h���� 0� 0�� 3�4��
�
�&����(8�(8��(;�<�
	F�	F���B7�7Cc��tj�}|j|j�|j	t
d��5}|j
dd|��}ddd�|jdjjd�|jd|jjd�y#1swY�\xYw)	NzAExpected ValueError when stderr and capture_output args supplied.rRr�T)r�rCrCrr�r�r�s    r�#test_stderr_with_capture_output_argz3RunFuncTestCase.test_stderr_with_capture_output_arg�r�r�z)requires posix like 'sleep' shell commandc�J�	tj�}	tjdddd��|j	d�|j|z
dd�d��	�y#tj
$r2}tj�}t
j�}Yd}~�\d}~wwxYw)
Nzsleep 3Tr_)r�rar�zTimeoutExpired not raised.g�?z/TimeoutExpired was delayed! Bad traceback:
```
z```rR)	r=�	monotonicrrr�rc�	traceback�
format_exc�
assertLess)r%�before_secsrG�
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputs���X��n�n�&��	4��N�N�9�D�#�*.�
0�
�I�I�2�3����
�[�0�#�O�!�(�#�'�	�	(���(�(�	,����)�J��)�)�+�F��	,�s�A�B"�0(B�B"c�x�tjd�}tjtj
dd|gd��}|jj�}|jt|�d|�|j|djd��|j|d	jd
��y)Nz�            from subprocess import *
            run("echo hello", shell=True, text=True)
            check_output("echo hello", shell=True, text=True)
            z-Xwarn_default_encodingrTr�rfrs<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )r�r�rrrWrXrC�
splitlinesrYr�r�r�)r%r�r��liness    r�test_encoding_warningz%RunFuncTestCase.test_encoding_warnings������ ���
�^�^�S�^�^�-F��d�S�+/�1���	�	�$�$�&������U��Q��.�����a��+�+�,L�M�N�����a��+�+�,L�M�NrN)r1r2r3r�r�r�r�r�r�r�r�r�r�rr�r�r�r�r�r�rmr�r(r�r�r�r�r�r�r�r4rrr�r�Zs���.�
"�5�
+�
@�*�
*�
	*�*�4��W���z�*�6�+�6�,�H�-�-��X����$I�J�%�K�%�+�
=�
=� �X�_�_�Y� K�L�
(�M�
(�Orr�c��dD]"}ts�
	tj|�|cStjd��#t$rY�EwxYw)N)�staff�nogroup�grp�nobody�	nfsnobodyz?No identified group name to use for this test on this platform.)r��getgrnam�KeyErrorrmrn)�
name_groups r�_get_test_grp_namersW��H�c�
��
����Z�(���
c���� a�b�b��	�
��
�s�=�	A	�A	zPOSIX specific testsc���eZdZ�fd�Zd�Zd�Zd�Zd�ZGd�dej�Z
ejd�d	��Z
ejd�d
��Zej ej$j'd�d�d
��Zd�Zej,eed�xr	eed�d�d��Zej,eed�d�d��Zej eed�d�d��Zej,eed�d�d��Zej eed�d�d��Zej,eed�d�d��Zej,eed�d�d ��Zd!�Zd"�Z ej e!xs
eed#�d$�d%��Z"d&�Z#d'�Z$d(�Z%d)�Z&d*�Z'd+�Z(Gd,�d-ej�Z)ej ej$j'd.�d/�d0��Z*d1�Z+ej e,jZd2k(d3�d4��Z.d5�Z/d6�Z0d7�Z1d8�Z2d9�Z3d:�Z4d;�Z5ej e,jZjmd<�d=�d>��Z7d?�Z8d@�Z9dA�Z:dB�Z;dC�Z<dD�Z=dE�Z>dF�Z?dG�Z@dH�ZAdI�ZBdJ�ZCdK�ZDdL�ZEdM�ZFdN�ZGdO�ZHdP�ZIdQ�ZJdR�ZKdS�ZLdT�ZMdU�ZNdV�ZOdW�ZPdX�ZQdY�ZRdZ�ZSej e,jZjmd[�xr9ej�d\�j�ej�d]�j�k(d^�d_��ZVeWj�d`da�db��ZYdc�ZZdd�Z[de�Z\df�Z]dg�Z^dh�Z_di�Z`dj�Zadk�Zbdl�ZceWj�dm��ZeeWj�dn��Zfdo�Zgdp�Zhdq�Zidr�Zjej,ekdsuxr	eekdt�du�dv��Zldw�Zmdx�Zndy�Zodz�Zp�xZqS){�POSIXProcessTestCasec�0��t�|��d|_y)Nz/_this/pa.th/does/not/exist)�superr&�_nonexistent_dir�r%rrs �rr&zPOSIXProcessTestCase.setUp.s���
��
�� =��rc��	tj|j�|jd|jz�S#t$r
}|}Yd}~|Sd}~wwxYw)Nz,chdir to nonexistent directory %s succeeded.)r�chdirrr�r�)r%r�desired_exceptions   r�_get_chdir_exceptionz)POSIXProcessTestCase._get_chdir_exception2s`��		-��H�H�T�*�*�+�
�I�I�D��+�+�,�
-� � ���	"�!"��!� ��	"�s�A�	A�
A�Ac���	|j�}	tjtjddg|j
��}|j
d|z�y#t$r|}|j|j|j�|j|j|j�|j|j|j�Yd}~yd}~wwxYw)Nrrr�Expected OSError: %s�rrrDrWrXrr�r�rYr��strerrorr��r%rrKrs    r�test_exception_cwdz'POSIXProcessTestCase.test_exception_cwd?s���I� �5�5�7��
	B�� � �#�.�.�$��!;�%)�%:�%:�<�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E���2A�	C�#A2C�Cc���	|j�}	tjtjddg|j
��}|j
d|z�y#t$r|}|j|j|j�|j|j|j�|j|j|j�Yd}~yd}~wwxYw)Nrrr�rrrs    r�test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executableNs���P� �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�rc��	|j�}	tj|jddg�}|j	d|z�y#t
$r|}|j
|j|j�|j
|j|j�|j
|j|j�Yd}~yd}~wwxYw)Nrrr)
rrrDrr�r�rYr�rr�rs    r�test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0]s���M� �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��eZdZd�Zy)�&POSIXProcessTestCase.PopenNoDestructorc��yr"r4r$s r�__del__z.POSIXProcessTestCase.PopenNoDestructor.__del__sr�rN)r1r2r3rr4rr�PopenNoDestructorrrs��	rrr�c���	d�}||_tjdt��5|j	t
�5|j
dg�ddd�ddd�y#1swY�xYw#1swYyxYw)Nc��|d}djtj�j�}t	j
|d|zdz�y)N�
z{:x}sOSError:�:r)r�r��EISDIRr�rr�)r:�
errpipe_write�err_codes   r�proper_errorzHPOSIXProcessTestCase.test_exception_errpipe_normal.<locals>.proper_errorysA�� ��H�M��}�}�U�\�\�2�9�9�;�H��H�H�]�K�(�$:�T�$A�B�r�subprocess.os.waitpid�r��non_existent_command)r�rrs�ChildProcessErrorrb�IsADirectoryErrorr)r%�	fork_execr$s   r�test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normalvs��L�	�!-�	��
�Z�Z�/�$5�7�	A��"�"�#4�5�
A��&�&�(>�'?�@�
A�	A�	A�
A�
A��	A�	A�s"�A-�A!�A-�!A*	�&A-�-A6c�l��	d��fd�}||_tjdt��5|j	t
j�5}|jdg�ddd�ddd�|jt��tj��y#1swY�@xYw#1swY�DxYw)Ns�ޭc�<��|d}tj|��y)Nrr)rr�)r:r"�
error_datas  �r�	bad_errorzGPOSIXProcessTestCase.test_exception_errpipe_bad_data.<locals>.bad_error�s��� ��H�M�
�H�H�]�J�/�rr%r&r')r�rrsr(rbr�SubprocessErrorrrwrurrk)r%r*r/rr.s    @r�test_exception_errpipe_bad_dataz4POSIXProcessTestCase.test_exception_errpipe_bad_data�s����	"�(�
�	�!*�	��
�Z�Z�/�$5�7�	A��"�"�:�#=�#=�>�
A�!��&�&�(>�'?�@�
A�	A�
	
�
�
�d�:�&��A�K�K�(8�9�
A�
A��	A�	A�s#� B*�B�B*�B'	�#B*�*B3�/proc/self/statuszneed /proc/self/statusc�Z�tjddgd��}|j�D]}|jd�s�|}n|j	d�tjddgd��}|j�D]}|jd�s�|}n|jd�	�y)
N�catr2F)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.rR)rrvr�r�r��assertNotEqual)r%�default_proc_statusr$�default_sig_ign_mask�restored_proc_status�restored_sig_ign_masks      r�test_restore_signalsz)POSIXProcessTestCase.test_restore_signals�s���)�5�5��+�,� %�'��(�2�2�4�	D�D����y�)�'+�$��	D�

�M�M�B�C�)�6�6��+�,� $� &��)�3�3�5�	�D����y�)�(,�%��	�	
���0�2G�!3�	�	4rc�"�	tjtjddgd��}t	j
d�}t
|�}|j||�y#t$r(}|jtjk7r�Yd}~yd}~wwxYw)Nrzimport os; print(os.getsid(0))T)�start_new_sessionr)rrvrWrXr�getsid�intr6�PermissionErrorr��EPERM)r%r{�
parent_sid�	child_sidrs     r�test_start_new_sessionz+POSIXProcessTestCase.test_start_new_session�s{��
	7��,�,��^�^�T�+K�L�&*�,�F����1��J��F��I����
�I�6��
�	��w�w�%�+�+�%��&��	���(A�	B�&B	�	B�setpgid�getpgidz!no setpgid or getpgid on platformc�"�	tjtjddgd��}t	j
d�}t
|�}|j||�y#t$r(}|jtjk7r�Yd}~yd}~wwxYw)Nrzimport os; print(os.getpgid(0))r)�
process_group)rrvrWrXrrGr?r6r@r�rA)r%r{�parent_pgid�
child_pgidrs     r�test_process_group_0z)POSIXProcessTestCase.test_process_group_0�s{��
	9��,�,��^�^�T�+L�M�"#�%�F��*�*�Q�-�K��V��J�����Z�8��
�	��w�w�%�+�+�%��&��	�rE�setreuidzno setreuid on platformc�2�tj�}|dk7rdnd|g}tjdk7rdnd}t�'	t	j
|�|j
|�|D]�}dD]�}|j||��5	tjtjdd	g||��}t|t�r t	j
|�j}n|}t|�}|j!||�ddd�����|j-t.�5tj0t2d
��ddd�|j-t4�5tj0t2tj6tj8d�
�ddd�t�=|�:|j-t.�5tj0t2|��ddd�yyy#t$rd}Y���wxYw#t"$rn}	|	j$t$j&k(r+|j!|	j(tj�n|j+|	j(�Yd}	~	��dd}	~	wwxYw#1swY��xYw#1swY��>xYw#1swY��xYw#1swYyxYw)N���darwinr��unknownr�)�user�	close_fdsrzimport os; print(os.getuid())rw�rS�)rr�rS)r�geteuidrWr��pwd�getpwnamr�r�subTestrrvrX�
isinstancer�pw_uidr?rYr@r��EACCESr�rrbryrgr�
OverflowErrorrr�)
r%�uid�
test_users�name_uidrSrTr{�user_uid�
child_userrs
          r�	test_userzPOSIXProcessTestCase.test_user�s=���j�j�l��"�e�|�e���<�
�"�|�|�x�7�8�Y���?�
 ����X�&��!�!�(�+�
�	?�D�*�
?�	��\�\�t�y�\�A�?�?�!+�!8�!8�!$����!@�!B�%)�*3�	"5��&�d�C�0�'*�|�|�D�'9�'@�'@�H�'+�H�%(��[�
��(�(��X�>�%?�?�
?�	?�.�
�
�z�
*�	<��!�!�/��;�	<��
�
�}�
-�	M��!�!�/�&(�i�i�R�Z�Z�e�
M�	M��;�8�/��"�"�:�.�
F��%�%�o�H�E�
F�
F�0�;��E�
 ���
 ��+�:��7�7�e�l�l�2� �,�,�Q�Z�Z����H� �-�-�a�j�j�9���	:��?�?��(	<�	<��	M�	M��

F�
F�sm�&G�I'�)G-�,AI'�I4�:J�4J
�G*�)G*�-	I$	�6A#I	�I'�I$	�$I'�'I1�4I>�J
�
Jz setreuid() available on platformc��|jt�5tjtd��ddd�y#1swYyxYw)N�rU�rbryrrgrr$s r�test_user_errorz$POSIXProcessTestCase.test_user_errors5��
�
�
�z�
*�	?��!�!�/��>�	?�	?�	?��	�;�A�setregidzno setregid() on platformc�6�tj�}|dk7rdndg}t�}t�|j	|�||gzD]�}dD]�}|j||��5	t
jtjddg||��}t|t�r tj|�j}n|}t|�}|j||�ddd�����|j't(�5t
j*t,d��ddd�|j't.�5t
j*t,tj0tj2d	�
�ddd�t�:|j't(�5t
j*t,|��ddd�yy#t $r&}	|j#|	j$�Yd}	~	��d}	~	wwxYw#1swY���xYw#1swY��xYw#1swY��xYw#1swYyxYw)NrOrPr�)�grouprTrzimport os; print(os.getgid())rw�rlrV)rr�rl)r�getegidrr�r�rZrrvrWrXr[rr��gr_gidr?rYr@rr�rbryrgrr^rr�)
r%�gid�
group_listrrlrTr{�	group_gid�child_grouprs
          r�
test_groupzPOSIXProcessTestCase.test_groups����j�j�l��"�e�|�e��7�
�'�)�
��?����j�)��3�%�'�	A�E�*�
A�	��\�\���\�C�A�A�!+�!8�!8�!$����!@�!B�&+�*3�	"5��&�e�S�1�(+���U�(;�(B�(B�I�(-�I�&)�&�k���(�(��i�@�!A�A�
A�	A�,�
�
�z�
*�	=��!�!�/��<�	=��
�
�}�
-�	N��!�!�/�&(�i�i�R�Z�Z�u�
N�	N��;��"�"�:�.�
I��%�%�o�Z�H�
I�
I���'+�6��)�)�!�*�*�5�5��6��A�A��&	=�	=��	N�	N��

I�
I�s[�!G*�#)F8�AG*�<G7�5:H�H�8	G'	�G"	�G*�"G'	�'G*�*G4�7H�H�Hz setregid() available on platformc��|jt�5tjtd��ddd�y#1swYyxYw)Nrfrmrgr$s r�test_group_errorz%POSIXProcessTestCase.test_group_error:s9��
�
�
�z�
*�	@��!�!�/��?�	@�	@�	@�ri�	setgroupszno setgroups() on platformc�f�tj�}|dk7rdndg}|j||��y)NrOrP�rprq)rrn�_test_extra_groups_impl)r%rprqs   r�test_extra_groupsz&POSIXProcessTestCase.test_extra_groups?s0���j�j�l��"�e�|�e��7�
��$�$���$�Drc�N�|jtj�g��y)Nry)rzrrnr$s r�test_extra_groups_empty_listz1POSIXProcessTestCase.test_extra_groups_empty_listEs���$�$�����"�$�Erc���t�}t�|j|�	tjt
jddg|��}tj�}tj|�}t�?|D�cgc]3}t|t�rtj|�jn|��5}}n|}|jt!|�t!|��t�;|j+t,�5tj.t0|g��ddd�yycc}w#t"$r6}	|j%|	j&�|j)d�Yd}	~	��d}	~	wwxYw#1swYyxYw)Nrz;import os, sys, json; json.dump(os.getgroups(), sys.stdout)��extra_groupsz-setgroup() EPERM; this test may require root.)rr�r�rrvrWrXr�	getgroups�json�loadsr[rr�rorY�setr@rr�r�rbryrgr)
r%rprqrr{�
parent_groups�child_groups�g�desired_gidsrs
          rrzz,POSIXProcessTestCase._test_extra_groups_implIsL��'�)�
��?����j�)�	C��,�,��^�^�T�R�T�!+�-�F��L�L�N�M��:�:�f�-�L���)3� 5�$%�;E�Q��:L����Q�� 6� 6�RS� S� 5�� 5� *�����S��.��L�0A�B��;��"�"�:�.�
A��%�%�o�4>�<�A�
A�
A��� 5���	K����a�j�j�)��M�M�I�J�J��	K�� 
A�
A�s)�(D&�>8D!�:E(�&	E%�/,E � E%�(E1c�X�|jt�5tjtdg��ddd�|jt�5tjtt
jt
jdg��ddd�y#1swY�bxYw#1swYyxYw)NrwrrV)rr�r�)rbryrrgrrrr�r$s r�&test_extra_groups_invalid_gid_t_valuesz;POSIXProcessTestCase.test_extra_groups_invalid_gid_t_valuesis���
�
�
�z�
*�	F��!�!�/���E�	F��
�
�z�
*�	8��!�!�/�&(�i�i�R�Z�Z�05�w�
8�	8�	8�	F�	F��	8�	8�s�B�;B �B� B)�umaskzPOSIX umask() is not available.c	���d}	tj�}tjj	|d�}tjtjdd|�d�gd��tj|�jdz}d}|j||t|��d	t|����
�|�tj|�yy#|�tj|�wwxYw)N�beansrzopen(z, 'w').close()�+)r�i�i�z != rR)r�r�rr�r�rrgrWrX�stat�st_moderY�octrr)r%r�namer��
expected_modes     r�
test_umaskzPOSIXProcessTestCase.test_umaskrs�����	&��%�%�'�F��7�7�<�<���0�D�
�!�!��^�^�T�U�4�(�.�+I�J��
!�
�g�g�d�m�+�+�e�3�G�!�M����]�G�$'�
�$6�#7�t�C��L�>�!J�
�
L��!��
�
�f�%�"��v�!��
�
�f�%�"�s�B/C�C&c��tj�5tjtj
ddg�}|j
�ddd�|jjtj�y#1swY�5xYw)Nrzimport os; os.abort())rr#rrDrWrXr*rYrr��SIGABRTrJs  r�test_run_abortz#POSIXProcessTestCase.test_run_abort�sh��
�
(�
(�
*�	�� � �#�.�.�$�"9�";�<�A�
�F�F�H�	�	
���!�,�,�����7�		�	�s�7B�B	c�,�tjttj�d�}t|�}|j
d|j��|j
d|�|j
ttj�|�y)N�fake cmdr��SIG)rrjr?r�r�rrw�lower�r%r��error_strings   r�"test_CalledProcessError_str_signalz7POSIXProcessTestCase.test_CalledProcessError_str_signal�si���+�+�S����-@�,@�*�M���3�x��	
�
�
�h�� 2� 2� 4�5�	
�
�
�e�\�*��
�
�c�&�.�.�)�<�8rc�j�tjdd�}t|�}|jd|�y)Ni�Ki�r�zunknown signal 9876543.�rrjrrwr�s   r�*test_CalledProcessError_str_unknown_signalz?POSIXProcessTestCase.test_CalledProcessError_str_unknown_signal�s,���+�+�H�j�A���3�x���
�
�/��>rc�j�tjdd�}t|�}|jd|�y)Nrfr�znon-zero exit status 2.r�r�s   r�$test_CalledProcessError_str_non_zeroz9POSIXProcessTestCase.test_CalledProcessError_str_non_zero�s,���+�+�A�z�:���3�x���
�
�/��>rc��tjtjddgtjd���}|5|j|jj�d�ddd�y#1swYyxYw)Nrr�c�.�tjdd�S)Nr��apple)r�putenvr4rr�<lambda>z3POSIXProcessTestCase.test_preexec.<locals>.<lambda>�s���	�	�'�7�0K�r)rB�
preexec_fn�appler?rJs  r�test_preexecz!POSIXProcessTestCase.test_preexec�si��
���c�n�n�d�E�F�%/�O�O�(K�	
M��
�	8����Q�X�X�]�]�_�h�7�	8�	8�	8�s�+A/�/A8c�^�d�}	tjtjddg|��}|j	d�y#tj
$r*}|j
tjd�Yd}~yd}~wt$r)}|jd|jd�Yd}~yd}~wwxYw)	Nc��td��)Nz'What if two swallows carried a coconut?�ryr4rr�raise_itz=POSIXProcessTestCase.test_preexec_exception.<locals>.raise_it�s���F�G�Grrr�r�zEException raised by preexec_fn did not make it to the parent process.z)Expected a ValueError from the preexec_fn�coconutr)rrDrWrXr�r0r��
_fork_execryrwr:)r%r�rKrs    r�test_preexec_exceptionz+POSIXProcessTestCase.test_preexec_exception�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,� A7�7B,�B'�'B,c��eZdZ	d�Zd�Zy)�+POSIXProcessTestCase._TestExecuteChildPopenc�X�||_tjj|g|��i|��yr")�	_testcaserrDr�)r%�testcaser:r;s    rr�z4POSIXProcessTestCase._TestExecuteChildPopen.__init__�s'��%�D�N����%�%�d�<�T�<�V�<rc
��	tjj|g|��i|��td�D�cgc]&}t	j
dtj���(}}	|D]k}|jj||jj�|jj�|jj�fd���m	|D]}t	j|��ycc}w#|D]}t	j|��wxYw#td�D�cgc]&}t	j
dtj���(ncc}w}}	|D]k}|jj||jj�|jj�|jj�fd���m	|D]}t	j|��w#|D]}t	j|��wxYwxYw)N��	/dev/zeroz!At least one fd was closed early.rR)rrDr<r�rr��O_RDONLYr�r�rAr4rBrCrI)r%r:r;r��devzero_fdsrHs      rr<z:POSIXProcessTestCase._TestExecuteChildPopen._execute_child�s���
%�� � �/�/��F�t�F�v�F�).�a��2�#$� "�w�w�{�B�K�K�@�2��2�%�)�I�����2�2� "�T�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�I�*�%�������%��2��*�%�������%��).�a��2�#$� "�w�w�{�B�K�K�@�2��2��2�%�)�I�����2�2� "�T�Z�Z�%6�%6�%8�$�+�+�:L�:L�:N�%)�[�[�%7�%7�%9�%;�$G�3�I�I�*�%�������%��k�%�������%�sB�#D�+C.� A0C3�3D�H�"+E�
H�A0G$�H�$H�HN)r1r2r3r�r<r4rr�_TestExecuteChildPopenr��s��A�	=�	%rr�r�z/dev/zero required.c	��	d�}|jtj�5|j|ttj
tj
tj
|��ddd�y#1swYyxYw)Nc�,�tjd��)Nz-force the _execute_child() errpipe_data path.)rr0r4rrr�zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�s���,�,�C�E�
Er)rArBrCr�)rbrr0r�rrE)r%r�s  r�0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes�si��D�	E��
�
�z�9�9�
:�	E��'�'��o�(�o�o�j�o�o�)���8�
(�
E�	E�	E�	E�s�AA3�3A<c��tj�}	tj�|jtj��t	j
tjddgd���|jtj�d�tj�|jtj��t	j
tjddgd���|jtj�d�|stj�yy#|stj�wwxYw)Nrrc��yr"r4r4rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>���rr�z#Popen enabled gc when it shouldn't.c��yr"r4r4rrr�zEPOSIXProcessTestCase.test_preexec_gc_module_failure.<locals>.<lambda>�r�rzPopen left gc disabled.)
�gc�	isenabled�disabler,rrVrWrX�enabler�)r%�enableds  r�test_preexec_gc_module_failurez3POSIXProcessTestCase.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�DD6�6ErQz!setrlimit() seems to fail on OS Xc�R�	ddlm}m}m}�}|\}}|d|f�|j
|||�	tjtjddgd���|jd�y#t$r}|j|�Yd}~��d}~wwxYw#t$rYywxYw)Nr)�	getrlimit�	setrlimit�RLIMIT_NPROCrrc��yr"r4r4rrr�z@POSIXProcessTestCase.test_preexec_fork_failure.<locals>.<lambda>	r�rr�z.RLIMIT_NPROC had no effect; probably superuser)�resourcer�r�r�r7r�r�rrVrWrX�BlockingIOError)r%r�r�r�r��limitsr��hards        r�test_preexec_fork_failurez.POSIXProcessTestCase.test_preexec_fork_failure�s���
	�C�C��<�(���	��D��,��D�	�*����	�<��8�	L��O�O�S�^�^�T�2�6�'3�
5�
�M�M�J�K���	��M�M�#����	���	��	�s(�
A3�)B�3	B�<B�B�	B&�%B&c���tj�\}}t|dd��5}|jdtj
z�|jdtjz�ddd�tj|d�tj|�}|j�tj|�|j|jd�y#1swY�vxYw�N�wr�)r�z#!%s
z(exec '%s' -c 'import sys; sys.exit(47)'
i�rT)r�r\r�r�r�
unix_shellrWrXr�chmodrrDr*r]rYr)r%rH�fname�fobjrKs     r�test_args_stringz%POSIXProcessTestCase.test_args_string	s����$�$�&�	��E�
�"�c�"3�
4�	'���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�	'�	���������U�#��	����
�	�	�%��������r�*�	'�	'�s�AC � C)c���|jttjtj
ddgd��|jttjtj
ddgd��y)NrrSrT��startupinfo��
creationflags�rbryrrVrWrXr$s rr�z&POSIXProcessTestCase.test_invalid_args 	sb�����*�j�o�o��>�>�4�5�7�&(�	�	*�	
���*�j�o�o��>�>�4�5�7�(*�	�	,rc�:�tjj�}d|d<tjdgdtj
|��}|5|j
|jj�jd�d�ddd�y#1swYyxYw�Nr�r�zecho $FRUITr��r�rBr�s 	
r��
rr�r�rrDrErYrBr	r��r%r�rKs   r�test_shell_sequencez(POSIXProcessTestCase.test_shell_sequence+	s~�������"��!��w�����m�_�A�$.�O�O�!'�
)���	L����Q�X�X�]�]�_�2�2�<�@�(�K�	L�	L�	L�s�:B�Bc�8�tjj�}d|d<tjddtj
|��}|5|j
|jj�jd�d�ddd�y#1swYyxYwr�r�r�s   r�test_shell_stringz&POSIXProcessTestCase.test_shell_string5	s|�������"��!��w�����]�!�$.�O�O�!'�
)���	L����Q�X�X�]�]�_�2�2�<�@�(�K�	L�	L�	L�s�
:B�Bc��tj�\}}t|dd��5}|jdtj
z�|jdtjz�ddd�tj|d�tj|�}tj|�|j|d�y#1swY�\xYwr�)r�r\r�r�rr�rWrXrr�rrVr]rY)r%rHr�r�r[s     r�test_call_stringz%POSIXProcessTestCase.test_call_string?	s����$�$�&�	��E�
�"�c�"3�
4�	'���J�J�x�'�"4�"4�4�5��J�J�B��~�~�&�
'�	'�	������
�_�_�U�
#��
�	�	�%������R� �	'�	'�s�AC�Cc	��g}dD]Z}dD]S}tjj||�}tjj|�s�C|j	|��U�\|s|jd�d}tjj|�r0tjj
|�s|j	|�|D]v}tjd|dtj��}|5|j|jj�j�t|d��ddd��xy#1swY��xYw)	N)z/binz	/usr/bin/z/usr/local/bin)�bash�kshz"bash or ksh required for this testz/bin/shzecho $0T)rXr�rBr�)rr�r��isfiler�r��islinkrrDrErYrBr	r�r�)r%�shellsr�r��shrKs      r�test_specific_shellz(POSIXProcessTestCase.test_specific_shellL	s����=�	&�F�'�
&���W�W�\�\�&�$�/���7�7�>�>�"�%��M�M�"�%�
&�	&�
��M�M�>�?�
��
�7�7�>�>�"��b�g�g�n�n�R�&8��M�M�"���	N�B�� � ��r��(2���9�A��
N�� � �������!6�!6�!8�%��G�:L�M�
N�
N�	N�
N�
N�s
�4AE�E	c��tjtjtj�}	tjt
jddgdtjtjtj��}tjtj|�|jjd�t||�|�|S#tjtj|�wxYw)Nrz�if 1:
                                 import sys, time
                                 sys.stdout.write('x\n')
                                 sys.stdout.flush()
                                 time.sleep(30)
                                 T�rTrArBrCr�)r��SIGINT�default_int_handlerrrDrWrXrErBr	�getattr)r%�methodr:r�rKs     r�
_kill_processz"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�����6��D�!����
�M�M�&�-�-��5�s�AC�&C?)�netbsd�openbsdz"Due to known OS bug (issue #16762)c�L�tjtjddgdtjtjtj��}|j
j
d�tjd�t||�|�|j�y)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             Tr�r�)rrDrWrXrErBr	r=r>r�r�)r%r�r:rKs    r�_kill_dead_processz'POSIXProcessTestCase._kill_dead_processy	sw��

���c�n�n�d�5!�"�
(,�#-�?�?�$.�O�O�$.�O�O�
5��	
���
�
�a���
�
�1�
����6��D�!�	�
�
�rc���|jdtj�}|j�\}}|j	d|�|j|j
�d�y)N�send_signalsKeyboardInterruptr)r�r�r�r�rwr6r*�r%rKr�rCs    r�test_send_signalz%POSIXProcessTestCase.test_send_signal�	sL�����}�f�m�m�<���M�M�O�	��6��
�
�*�F�3����A�F�F�H�a�(rc���|jd�}|j�\}}|j|d�|j|j�tj
�y)Nror)r�r�rYr*r��SIGKILLrs    r�	test_killzPOSIXProcessTestCase.test_kill�	sM�����v�&���M�M�O�	��6������%��������F�N�N�?�3rc���|jd�}|j�\}}|j|d�|j|j�tj
�y)N�	terminater)r�r�rYr*r��SIGTERMrs    r�test_terminatez#POSIXProcessTestCase.test_terminate�	sM�����{�+���M�M�O�	��6������%��������F�N�N�?�3rc�D�|jdtj�y�Nr)rr�r�r$s r�test_send_signal_deadz*POSIXProcessTestCase.test_send_signal_dead�	s�����
�v�}�}�=rc�&�|jd�y�Nro�rr$s r�test_kill_deadz#POSIXProcessTestCase.test_kill_dead�	s������'rc�&�|jd�y�Nr	rr$s r�test_terminate_deadz(POSIXProcessTestCase.test_terminate_dead�	s������,rc��g}|D]@}tj|�}tj|�}|j|||f��B|Sr")r�get_inheritable�dupr�)r%�save_fdsr?rH�inheritable�saveds      r�	_save_fdszPOSIXProcessTestCase._save_fds�	sM�����	1�B��,�,�R�0�K��F�F�2�J�E��J�J��E�;�/�0�	1��
rc�t�|D]3\}}}tj|||��tj|��5y)N)r)r�dup2rI)r%r?rHrrs     r�_restore_fdsz!POSIXProcessTestCase._restore_fds�	s3��&)�	�"�B��{��G�G�E�2�;�7��H�H�U�O�	rc���d}|j|�}|D]\}}}|dk(s�
|}n	|D]}tj|��tjt
jddg|tjtj��j�\}}|j|d�|j|d�|j|�y#|j|�wxYw)NrrrVr@r�r>)rrrIrrDrWrXrEr�rYr)	r%r?rA�	saved_fdsrHrrr�r�s	         r�check_close_std_fdsz(POSIXProcessTestCase.check_close_std_fds�	s������N�N�3�'�	�&/�	�"�B��{��Q�w����	�	)��
�������
�!�'�'�����;�)<�
#�(�o�o�(�o�o�/�0;�{�}�
�C��
���S�(�+����S�)�,����i�(��D���i�(�s�BC�C%c�(�|jdg�yrf�r"r$s r�test_close_fd_0z$POSIXProcessTestCase.test_close_fd_0�	���� � �!��%rc�(�|jdg�y�Nr�r$r$s r�test_close_fd_1z$POSIXProcessTestCase.test_close_fd_1�	r&rc�(�|jdg�y)Nrfr$r$s r�test_close_fd_2z$POSIXProcessTestCase.test_close_fd_2�	r&rc�*�|jddg�y)Nrr�r$r$s r�test_close_fds_0_1z'POSIXProcessTestCase.test_close_fds_0_1�	���� � �!�Q��(rc�*�|jddg�y)Nrrfr$r$s r�test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2�	r.rc�*�|jddg�y)Nr�rfr$r$s r�test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2�	r.rc�*�|jgd��y)N)rr�rfr$r$s r�test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2�	s��	
� � ��+rc�z�	tjd�}tjd�}	tjd�tjd�tjt
jddg�j�tj|d�tj|d�tj|�tj|�y#tj|d�tj|d�tj|�tj|�wxYw)Nrr�rz*print('AssertionError:0:CLOEXEC failure.'))	rrrIrrDrWrXr*r)r%�	new_stdin�
new_stdouts   r�test_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd�	s���K��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
�AC"�"AD:c��td�D�cgc]}tj���}}	|D��cgc]\}}|��	}}}|D]\}}tj|��tj
|dd�tj|ddd�|jtd��}	t|�D]\}}tj||��tjtjddg|d|d|d��}|j�|j|�|D]}tj|dd��tj |dd	�}	tj |dd	�j#�}
|j%|	d
�|j%|
d�|D]}tj&|��ycc}wcc}}w#|j|�wxYw#D]}tj&|��wxYw)Nr�r��STDINrr�Zimport sys; got = sys.stdin.read();sys.stdout.write("got %s"%got); sys.stderr.write("err")rfr@rC�	got STDIN�err)r�r�r\r�unlinkr�r5r�	enumeraterrrDrWrXr*rr	r�rYrI)r%r�tempsrHr��temp_fdsr!�temp_fdrKr�r�s           r�test_remapping_std_fdsz+POSIXProcessTestCase.test_remapping_std_fds
s���-2�1�X�6���!�!�#�6��6�(	�,1�2�y�r�5��2�H�2�#�
!�	��E��	�	�%� �
!�
�H�H�X�a�[�(�+��H�H�X�a�[�!�Q�'����u�Q�x�0�I�
-�#,�X�#6�)�K�B���G�G�G�R�(�)�
�$�$�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�A/G*�-A,G�BG*�G*�G'�'G*�*Hc���td�D�cgc]}tj���}}|D��cgc]\}}|��	}}}	|D]\}}tj|��|jtd��}		t
|�D]\}}
tj|
|��tj|d�tj|dd�tjtjddg|||��}|j�|D]}tj|dd��tj|d�}tj|d�j!�}
|j#|	�|j%|d�|j%|
d	�|D]}tj&|��ycc}wcc}}w#|j#|	�wxYw#|D]}tj&|��wxYw)
Nr�r:rrr;r@rCr<r=)r�r�r\rr>rr?rr�r5rrDrWrXr*r	r�rrYrI)r%�stdin_no�	stdout_no�	stderr_norr@rHr�rAr!rBrKr�r�s              r�check_swap_fdsz#POSIXProcessTestCase.check_swap_fds-
s���-2�1�X�6���!�!�#�6��6�(-�.�9�2�u�B�.��.�'	�"�
!�	��E��	�	�%� �
!����u�Q�x�0�I�
-�#,�X�#6�)�K�B���G�G�G�R�(�)�����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/�F4�F9�9G�:C(F?�"5G�?G�G�G3c���|jddd�|jddd�|jddd�|jddd�|jddd�|jddd�y)Nrr�rf)rHr$s r�
test_swap_fdsz"POSIXProcessTestCase.test_swap_fds]
sn�����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$����A�q�!�$rc�j�|jtd��}	|D]C}tj�5}t	j
|j
�|�ddd��Ettd��t|�z
j�}t	j|�gd�}i}t||�D]
\}}	||||	<�tjd�}
ttd��t|�z
j�}tjtj d|
t#|�gfi|��}|j%|d�t||�D]�\}}	t	j&|dtj(�t	j*|d�}
t-t/t0|
j3d���}tjd|�d	|�d
|�d|�d|	�d
��}|j%|	g||���	|j5|�y#1swY���xYw#|j5|�wxYw)Nr�r@z�
                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'))
            rrrCr�z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )rr�r�r�rrr4r�rrI�zipr�r�rrVrWrXrrYr5�SEEK_SETr	r��mapr?r
r)r%�from_fds�to_fdsr!�from_fd�f�fd_to_close�	arg_namesr;�to_fdr��
skipped_fdr[�
read_bytes�read_fdsrSs                r�#_check_swap_std_fds_with_one_closedz8POSIXProcessTestCase._check_swap_std_fds_with_one_closede
s
���N�N�5��8�,�	�&	)�#�
1���+�+�-�1���G�G�A�H�H�J��0�1�1�
1��u�Q�x�=�3�x�=�8�=�=�?�K��H�H�[�!�5�I��F�"%�h��"7�
3����+2��y��'�(�
3��?�?�$��D��e�A�h�-�#�f�+�5�:�:�<�J����#�.�.�$��c�*�o�!N�+�#)�+�B����R��#�"%�h��"7�	
9��������!�R�[�[�1��W�W�W�d�3�
���C��):�):�7�)C� D�E���o�o�+"�"*��4��x�8'�'.�i�0&�&.�Z�/F�u�g�N�'���
� � �%��(�C�8�	
9�
���i�(�I1�1��H
���i�(�s#�H�%H�F%H�H	�H�H2c��tjtd�d�D]8}tjtd�d�D]}|j	||���:y)Nr�rf)�	itertools�combinationsr��permutationsrY)r%rOrPs   r�!test_swap_std_fds_with_one_closedz6POSIXProcessTestCase.test_swap_std_fds_with_one_closed�
sV��!�.�.�u�Q�x��;�	K�H�#�0�0��q��1�=�
K���8�8��6�J�
K�	Krc��d�}	tjt|��|jd�y#t$rD}|jtj�|jt|�d�Yd}~yd}~wtj$rD}|jtj�|jt|�d�Yd}~yd}~wwxYw)Nc��td��)N�
surrogate:�r�r4rr�preparezCPOSIXProcessTestCase.test_surrogates_error_message.<locals>.prepare�
s���/�0�0rr�z1Expected ValueError or subprocess.SubprocessErrorraz!Exception occurred in preexec_fn.)rrVrr�ryrr�rYrr0�assertIsNotNone)r%rbr�s   r�test_surrogates_error_messagez2POSIXProcessTestCase.test_surrogates_error_message�
s���	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 �2�	C�:A:�:C�:C�Cc���dD�]Y\}}|jdd�}dt|�z}tjj	�}|||<d|d<|}tjtjd|g|��}|jd	�}|j|jd�t|��|jdd�}d
t|�z}tjj	�}|||<tjtjd|g|��}|jd	�}|j|jd�t|����\y)N))�testuabc�)utest��42r�r�z&import os; print(ascii(os.getenv(%s)))�C�LC_ALLrr�s

z'import os; print(ascii(os.getenvb(%s))))
r�rurr�r�rrvrWrXr�rYr
r�)r%�key�value�
encoded_value�scriptr��
decoded_valuerBs        r�test_undecodable_envz)POSIXProcessTestCase.test_undecodable_env�
s9��G�	K�J�C��!�L�L��2C�D�M�>��S�	�I�F��*�*�/�/�#�C��C��H� �C��M�!�M��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J��*�*�W�&7�8�C�>��c��J�F��*�*�/�/�#�C�$�C��H��,�,�����v�.���F��]�]�7�+�F����V�]�]�7�3�U�=�5I�J�5	Krc�4�tjtd�}ttdd�}tjjtd�\}}tj|�}t
j|g|z�}|j|d�d|dj|�jd�fz}t
j|d��}|j|d�tjj�}||d<t
j|g|z|�	�}|j|d�tjj�}tj|�|d
<t
j|g|z|�	�}|j|d�y)Nrr�s'%s' %s� r�Tro�PATHr�sPATH)rr�rr�r�rrrVrYr�r�r�r��environb)	r%�abs_programr:r��program�exitcoder�r��envbs	         r�test_bytes_programz'POSIXProcessTestCase.test_bytes_program�
sG���k�k�/�!�"4�5���O�A�B�'�(�����
�
�o�a�&8�9�
��g��+�+�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�
�tjdd��}tjdd��}tjtj
|gtjtjtjd��}|j|jd�tjtj
|gtjd��}|j�\}}ttt|jd	���}t|jj�|jj�|j j�g�}|j#||zd
|�d||z���y)Nzinput_reader.py�subprocessdata��subdir�fd_status.pyF)rArBrCrTr�rBrT�,zExpected no fds from z to be open in child, found )r�findfilerrDrWrXrEr�r�r�rNr?rrAr4rBrCr,)	r%�sleeper�	fd_status�p1�p2r{�error�
result_fds�unwanted_fdss	         r�test_pipe_cloexecz&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��	
����l�2� ,�Z�,�-F�H�	Irc���
��tjdd��}tjdd��}d}|dzdz}tjtj
|gtjtjd�	��
tjtj
||g�
jtjd�	��|j�
j�|j�j��
fd
�}�fd�}|j|�|j|��
jj|��
jj�tj�jgggd�\}}}	|j|d
�|j�jj!�|��
jj��jj�y)Nzqcat.pyrzr{zqgrep.pyszxcvbn��
F)rArBrTc�F��	�j�y#t$rYywxYwr"�r	�ProcessLookupError)r�s�r�kill_p1zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p1	�#���
������%�
��
����	 � c�F��	�j�y#t$rYywxYwr"r�)r�s�r�kill_p2zBPOSIXProcessTestCase.test_pipe_cloexec_real_tools.<locals>.kill_p2r�r�r�zThe child hung)rr�rrDrWrXrErBr�r*rAr�rI�selectr�rYr	)r%�qcat�qgrep�subdatarr�r��	readfiles�ignored1�ignored2r�r�s          @@r�test_pipe_cloexec_real_toolsz1POSIXProcessTestCase.test_pipe_cloexec_real_tools�
sa������	�2B�C��� � ��4D�E������{�U�"��
�
�
�s�~�~�t�4�$.�O�O�J�O�O�(-�/���
�
�s�~�~�u�g�>�$&�I�I�j�o�o�(-�/��	
������ ������� �	�
	�
	
���� ����� �
�����t��
������(.�
�
�r�y�y�k�2�r�2�(N�%�	�8�X����	�#3�4���������)�4�0�
�	�	����
�	�	���rc���
�tjdd��}tj�}|j	tj
|d�|j	tj
|d�t
|��
td�D]e}tjtjtj�}|j	tj
|��
j|��g�
D]}tj|d��tjtj |gtj"d�	�}|j%�\}}t
t't(|j+d
���}|j-|�
z�
d�tjtj |gtj"d�	�}|j%�\}}t
t't(|j+d
���}|j/|�
zd�|j1d|d
�t
�
fd�td�D��}	tjtj |gtj"d|	��}|j%�\}}t
t't(|j+d
���}|j/||	z
�
zd�|j1d|d
�y)Nr}rzr{rr��	TFr~rzSome fds were closedzSome fds were left openzSubprocess failedc3�>�K�|]}�j����y�wr")r)�.0r�r@s  �r�	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>Es�����;�Q�(�,�,�.�;�s�r��rBrT�pass_fdsz'Some fds not in pass_fds were left open)rr�rrjr�rIr�r�r��devnullr��add�set_inheritablerrDrWrXrEr�rNr?rrYr,rw)r%r�r?r�rHrKr{�ignored�
remaining_fds�fds_to_keepr@s          @r�test_close_fdsz#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�b�	tjdd��}tjtj
dt
jd|z�gtj��}|j�\}}|j�}|jt|�dd|z�	�ttt|d
j!�j#d���}ttt|dj!�j#d���}|j%||zd
�	�y)Nr}rzr{raK
        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))
        rsrfz(expected exactly two lines of output:
%rrRrrr�zSome fds were left open.)rr�rrDrWrXr�r�rEr�r�rYr�r�rNr?r�rr,)r%r�rKr{�
unused_stderr�output_lines�
opened_fdsr�s        r�%test_close_fds_when_max_fd_is_loweredz:POSIXProcessTestCase.test_close_fds_when_max_fd_is_loweredQs��	J��$�$�^�<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�	�	9rr�r~c	���tjdd��}t�}td�D]�}t	j
�}|j
tj|d�|j
tj|d�t	j|dd�t	j|dd�|j|���|D�]}tjtj|gtjd|f��}|j�\}}tt!t"|j%d	���}	||hz
}
|j'||	d
�|j)|	|
zd�|j+t,�5}|j)tj.t0d|f�
��ddd�|j'dt3j4����y#1swY�2xYw)Nr}rzr{r~rr�Tr�rzfd to be passed not passedzfd to be closed passedF)rTr�zoverriding close_fds)rr�r�r�rrjr�rIr��updaterrDrWrXrEr�rNr?rrwr,�assertWarnsr.rVrr�warning)r%r�r@r�r?rHrKr{r�r��to_be_closed�contexts            r�
test_pass_fdsz"POSIXProcessTestCase.test_pass_fds�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� �
	!��	H�B�� � �#�.�.�)�!<�(2���4�+-�&�2�A� �m�m�o�O�F�G���C����d�);� <�=�M�#�r�d�?�L��M�M�"�m�-I�J����]�\�9�5�
7��!�!�.�1�
;�W�� � ����'�"'�2�&�":�;�
;�
�M�M�0�#�g�o�o�2F�G�%	H�
;�
;�s�-G)�)G2	c�2�tjdd��}tj�\}}|j	tj
|�|j	tj
|�tj|d�tj|d�||f}tj|g}|ttt|��z
}tj|tjd|��}|j�\}}t!tt"|j%d���}	|j'|	t!|�d|z�|j'tj(|�d�|j'tj(|�d�y)	Nr}rzr{TFr�rz	output=%a)rr�rrjr�rIr�rWrXr�rNrrrDrEr�r�r?rrYr)
r%rmr�non_inheritabler�r:rKr{r�r?s
          r�test_pass_fds_inheritablez.POSIXProcessTestCase.test_pass_fds_inheritable�s5���!�!�.�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�N�	tjdd��}g}td�D]e}tjtj
tj�}|jtj|�|j|��gtj�\}}|jtj|�|jtj|�|jd|�tjtj|g|d|d|dd|��5tj |d	�}ddd�j#d
�D�chc]
}t%|���}	}|j'|	hd�t)|�zd|���y#1swY�UxYwcc}w)
Nr}rzr{rfr�rT)rArBrCrTr�rCr>rr�rfzoutput=)rr�r�rr�r��O_RDWRr�rIr�rj�insertrrDrWrXr	rr?rY�	frozenset)
r%r�r�r�rH�stdout_r�stdout_wr{�numr?s
          r�test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected�sN��E��$�$�^�<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�
	-�$*�<�<��#5�6�C�s�3�x�6��6�����i�)�H�*=�=���
�?S�T�	-�	-��7s�+F�F"�Fc���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)N�r+)rBrA�rGr�rr�rrDrr*�r%�inoutrKs   r�%test_stdout_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stdout_stdin_are_single_inout_fd��K��
�W�W�R�Z�Z��
&�	�%�� � ��(-�U�<�A�
�F�F�H�	�	�	���-A�A$c���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)Nr�r�r�r�s   r�&test_stdout_stderr_are_single_inout_fdz;POSIXProcessTestCase.test_stdout_stderr_are_single_inout_fdsK��
�W�W�R�Z�Z��
&�	�%�� � ��(-�e�=�A�
�F�F�H�	�	�	�r�c���tjtjd�5}t	j
t||��}|j�ddd�y#1swYyxYw)Nr�)rCrAr�r�s   r�%test_stderr_stdin_are_single_inout_fdz:POSIXProcessTestCase.test_stderr_stdin_are_single_inout_fd
r�r�c�>�tjdd��}tjtj
|gtjtj��}|j�\}}|jd|jd|jd�z�y)Nzsigchild_ignore.pyrzr{r�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rr�rrDrWrXrEr�rYrr
)r%�sigchild_ignorerKrBrCs     r�test_wait_when_sigchild_ignoredz4POSIXProcessTestCase.test_wait_when_sigchild_ignoreds}��!�*�*�+?�2B�D�����c�n�n�o�>�$.�O�O�J�O�O�
M�������������A�L�L�+:����w�/�+0�	1rc	���tjd�}tjtj
ddgtjd��}|j}|j|j�	|j|jd�d�|j||j|gggd�d�|j�y#|j�wxYw)	Nr�rz$import sys;sys.stdout.write("apple")r)rBrNr�sapplg)r�
import_modulerrDrWrXrErBr�rIrYr	rwr�r*)r%r�rKrRs    r�test_select_unbufferedz+POSIXProcessTestCase.test_select_unbuffereds����,�,�X�6�����c�n�n�d�:�;�%/�O�O�%&�	
(��

�H�H�������� �	����Q�V�V�A�Y��0��M�M�!�]�V�]�]�A�3��B��<�Q�?�@�
�F�F�H��A�F�F�H�s
�5A
C�C"c	�x�tjtjddgtjtj��}|j|jj�|j|jj�t|�}|j}tjdtf�5d}ddd�tr |jtj �y|j#|tj D�cgc]
}t|���c}�y#1swY�gxYwcc}w)Nrz import sys, time;time.sleep(0.2)r�r)rrDrWrXrEr�rBrIrC�id�pidr�check_warnings�ResourceWarningr(rr)rw)r%rK�identr��os     r�test_zombie_fast_process_delz1POSIXProcessTestCase.test_zombie_fast_process_del,s���

���c�n�n�d�0�1�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B�	��A�	�����j�0�0�1�
�M�M�%��1C�1C�!D�A�"�Q�%�!D�E�	�	��"Es�D+�D7
�+D4c	��tjtjddgtjtj��}|j|jj�|j|jj�t|�}|j}tjdtf�5d}tj�ddd�t!j"|t$j&�t(r |j+tj,�n7|j/|tj,D�cgc]
}t|���c}�t1j2d�|j5t6�5tjt8tjtj��5}	ddd�ddd�|j5t6t j:|d�t(r |j+tj,�y|j=|tj,D�cgc]
}t|���c}�y#1swY���xYwcc}w#1swY��xYw#1swY��xYwcc}w)Nrzimport time;time.sleep(3)r�rrQr)rrDrWrXrEr�rBrIrCr�r�rr�r�r�
gc_collectrror�rr(rr)rwr=r>rbr�r��waitpidr�)r%rKr�r�r�rxs      r�!test_leak_fast_process_del_killedz6POSIXProcessTestCase.test_leak_fast_process_del_killedDs���
���c�n�n�d�.�/�%/�O�O�$.�O�O�	
5��
	
��������'���������'��1����e�e��
�
+�
+�R��,A�
B�	!��A���� �	!�	����V�^�^�$�����j�0�0�1�
�M�M�%��1C�1C�!D�A�"�Q�%�!D�E�	
�
�
�3��
�
�
�w�
'�	��!�!�/�)3���)3���:�
�=A��
�	�	
���'�2�:�:�s�A�6�����j�0�0�1����U�J�4F�4F�$G�q�R��U�$G�H�5	!�	!��"E�
�
��	�	��%Hs<�I�	I(
�9I9�I-�I9�J
�I%�-I6	�2I9�9Jc���tjdd��}tjd��|j	tj
��t
jtj|gtjd�fd���}|j�\}}ttt|jd���}|j!�|�y)	Nr}rzr{r�Tc�0��tjd��Sr()rr)rHs�rr�zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>ys�������2��r)rBrTr�r)rr�rrr�rIrrDrWrXrEr�r�rNr?rr�)r%r�rKr{r�r�rHs      @r�test_close_fds_after_preexecz1POSIXProcessTestCase.test_close_fds_after_preexecos�����$�$�^�<L�M�	��V�V�A�Y��������"�%����c�n�n�i�8�$.�O�O�t�(>�
@���-�-�/�����C��V�\�\�$�%7�8�9�
�����]�+rc�
�ddl}tj�}	d�}tj�ddgddgfdgdddgfdgdgddgfdgdgddffD]q\}}}}|j	t
�5}|j
||dd||d	d	d	d	d
ddd
ddddgdd	|d�ddd�|jdtj���s	|stj�yy#1swY�IxYw#|stj�wwxYw)Nrc��yr"r4r4rrr�z5POSIXProcessTestCase.test_fork_exec.<locals>.<lambda>�r�rrlsexe�envsargTr4rwr�rfr�r�Fz
takes exactly)�_posixsubprocessr�r�r�rbr�r*r�rrkr�)	r%r��
gc_enabled�funcr:�exe_listr�env_listr�s	         r�test_fork_execz#POSIXProcessTestCase.test_fork_exec�s3��	 ��\�\�^�
� 	� �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�
F�-��h��X��&�&�y�1�%�S�$�.�.��h��b�#�x��B��B��1�a���d�A��r�1�b��e�%�%� � � ��#�c�m�m�2D�E�-
F�0��
�
���%%�%��$��
�
���s$�AC)�-(C�/C)�C&	�"C)�)Dc�$�ddl}Gd�d�}tj�}	tj�ddddd|d	�|d
�ffD]�}|j	t
dj
|���5}|jd
gd
gd|ddgddddd	d
ddddddddddd�ddd�|jdtj����	|stj�yy#1swY�IxYw#|stj�wwxYw)Nrc��eZdZdZd�Zd�Zy)�JPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadIntTc��||_yr")rk)r%rks  rr�zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__�s	��"��
rc�L�|jrd|_|jSt�)NF)�firstrkryr$s r�__int__zRPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__int__�s ���:�:�!&�D�J��:�:�%� � rN)r1r2r3r�r�r�r4rr�BadIntr��s���E�
#�
!rr�)rwrfr�r�r~)rr�)���*l)r~r�)r�rnrnr�r�rfzfds_to_keep={}rRsfalseTr�rwr�r�r�)r�r�r�r�rbryr�r*rwrrkr�)r%r�r�r�r�rms      r�%test_fork_exec_sorted_fd_sanity_checkz:POSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check�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�$�
$��
�
�m�S����-=�>�'
?�*��
�
���
$�
$����
�
���s$�AC6�7+C*�"/C6�*C3	�/C6�6Dc�L�tjt�}|5tjj|d�5}t|j_|j�|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)NrA)rrDrrrsrt�BrokenPipeErrorrIr�r��assert_called_with�r%rx�mock_proc_stdins   r�,test_communicate_BrokenPipeError_stdin_closezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close�s�������0��
�	7�4�:�:�$�$�T�7�3�	7��0?�O�!�!�-������!�!�4�4�6�	7�	7�	7�	7��	7�	7�s#�!B�AB�=B�B	�B�B#c��tjt�}|5tjj|d�5}t|j_|jd�|jjd�|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)NrA�stuff)rrDrrrsrtr�r�r�r��assert_called_once_withrIr�s   r�,test_communicate_BrokenPipeError_stdin_writezAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_write�s�������0��
�	<�4�:�:�$�$�T�7�3�	<��0?�O�!�!�-����X�&��!�!�9�9�(�C��!�!�9�9�;�		<�	<�	<�	<��	<�	<�s#�!B6�AB*�B6�*B3	�/B6�6B?c�@�tjtjdgtjtj��}|5t
jj|d�5}ttjd�5}t|j_
|j�|j_|j!d�|jj#�ddd�ddd�ddd�y#1swY�xYw#1swY�xYw#1swYyxYw)N�-hr�rA�wbr�)rrDrWrXrErrsrtr�rr�r�r�r�r4�return_valuer�r)r%rxr��dev_nulls    r�,test_communicate_BrokenPipeError_stdin_flushzAPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_flush�s���������� 6�&0�o�o�'1���8���	<�4�:�:�$�$�T�7�3�	<���R�Z�Z��&�	<�*2�0?�O�!�!�-�2:�/�/�2C�O�"�"�/����X�&��!�!�9�9�;�	<�	<�	<�	<�	<��	<�	<��	<�	<�s=�!D�(D�A C<�#D�+D�<D�D�D	�
D�Dc��tjtjdgtjtj��}|5t
jj|d�5}t|j_
|jd��|jj�ddd�ddd�y#1swY�xYw#1swYyxYw)Nrr�rAi�r`)
rrDrWrXrErrsrtr�rIr�r�rr�s   r�9test_communicate_BrokenPipeError_stdin_close_with_timeoutzNPOSIXProcessTestCase.test_communicate_BrokenPipeError_stdin_close_with_timeout�s���������� 6�&0�o�o�'1���8���	<�4�:�:�$�$�T�7�3�	<��0?�O�!�!�-����S��)��!�!�9�9�;�		<�	<�	<�	<��	<�	<�s%�!C�(AB;�*C�;C	�C�CN�
W_STOPCODEzneed _testcapi.W_STOPCODEc�\�	t}tj|�}tj|j
d��t
jd�}tjd|j
|f��5|j�}ddd�|jd�y#1swY�xYw)Nr�rvr�r%)r���)rrrDr�wait_processr��	_testcapir
rrsr*rY)r%r:rx�statusrs     r�test_stoppedz!POSIXProcessTestCase.test_stopped
s���	P�������%��	���T�X�X��2��%�%�a�(��
�Z�Z�/�t�x�x��>P�
Q�	%�����J�	%�	
����R�(�	%�	%�s�6B"�"B+c��tjt�}tj|j
d��|j
|j�tjd�5}|jtj�ddd�j�|j|j�y#1swY�5xYw)Nrrzos.kill)rrDrrrr�rrrrsrr�r
�assert_not_calledrc)r%rx�	mock_kills   r�test_send_signal_racez*POSIXProcessTestCase.test_send_signal_race
s�������0��	���T�X�X��2�	
���$�/�/�*�
�Z�Z�	�
"�	-�i����V�^�^�,�	-�
	�#�#�%�	
���T�_�_�-�	-�	-�s�+ B?�?Cc�~�tjtjddg�}|js|j�|js�tjj|dd���5d|_|jtj�ddd�|j�y#1swY�xYw)Nrzexit(1)rc��yr"r4r4rrr�z=POSIXProcessTestCase.test_send_signal_race2.<locals>.<lambda>0
r�r)�new)
rrDrWrXrrrrsrtrr�r
rorJs  r�test_send_signal_race2z+POSIXProcessTestCase.test_send_signal_race2'
s���
���c�n�n�d�I�>�?���,�,�
�F�F�H��,�,��Z�Z�
�
�q�&�l�
�
;�	*��A�L�
�M�M�&�.�.�)�	*�	
����	*�	*�s�3'B3�3B<c���tjtjddgtj��}		|jd��y#tj$rYnwxYw�.)Nrz+import os, time; os.close(1), time.sleep(2)rsr_r`)rrDrWrXrEr�rc�r%rxs  r�1test_communicate_repeated_call_after_stdout_closezFPOSIXProcessTestCase.test_communicate_repeated_call_after_stdout_close5
se���������!N�!P�'1���8���
�� � �� �-����,�,�
��
��	s�A�A"�!A"c��dt�d�}td|�\}}}|j|d�|jd|�y)Nz�if 1:
        import atexit
        import subprocess

        def dummy():
            pass

        def exit_handler():
            subprocess.Popen(zm, preexec_fn=dummy)
            print("shouldn't be printed")

        atexit.register(exit_handler)
        rrs0preexec_fn not supported at interpreter shutdown)rr	rYrw)r%r�r�r�r�s     r�test_preexec_at_exitz)POSIXProcessTestCase.test_preexec_at_exit@
sN���.�.�/	���'�t�T�2���3������c�"��
�
�I�3�Or)rr1r2r3r&rrrrrrDrrrsr+r1rmr�rr�r^r;rDr�r�rLrdrhrtrvr{r}rzr�r(r�r�r�r�r�r�r�r�r�r�rWr�r�r�r�r�r�r�r�r�r�rrrrrrrrrr"r%r)r+r-r0r2r4r8rCrHrJrYr^rdrorxr�r�r�r��st_devr�r�requires_mac_verr�r�r�r�r�r�r�r�r�r�r��cpython_onlyr�r�r�rrr	rrrrrr�
__classcell__�rrs@rrr+s���>�!�
B�
B�B�*�J�,�,���T�Z�Z�'�(�A�)�A� �T�Z�Z�'�(�:�)�:�*�X�_�_������(;�<�<�-�/�4�/�4�,7� �X�����Y�/�J�G�B�	�4J�<�>�9�>�9� �X�����Z�0�2K�L�1F�M�1F�f�X�_�_�W�R��,�.P�Q�?�R�?��X�����Z�0�2M�N�'I�O�'I�R�X�_�_�W�R��,�.P�Q�@�R�@��X�����[�1�3O�P�E�Q�E�
�X�����[�1�3O�P�F�Q�F�A�@8��X�_�_�Y�:�g�b�'�&:�":�6�8�&�8�&�(8�	9�?�
?�
	8�0� %��!1�!1�%�2�X�_�_�������4�4�6K�L�E�M�E��*�X�_�_����� �"E�G�L�G�L�(+�	,�L�L�!�N�(�2�X�_�_�S�\�\�,�,�-B�C�9�;��;��*)�4�4�>�(�-���
)�2&�&�&�)�)�)�,�
!�*+�Z+�`%�()�XK�
K�&K�:&�6I�.'�R-=�`�X�_�_�S�\�\�,�,�Y�7�I��R�W�W�V�_�+�+�w�r�w�w�y�/A�/H�/H�H�E�G�I9�G�I9�`�W���b�!�$�H�%�H�BE�<U�4���	1��"F�0)I�V,�"
���%��%�N
���'��'�R7�<�
<�
<��X����$�.�>�$�Y��=�4�6�)�6�)�.�,�	�PrrzWindows specific testsc��eZdZd�Zd�Zd�Zd�Zd�Zejd��Z
d�Zd�Zd	�Z
d
�Zd�Zd�Zd
�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zd�Zy)�Win32ProcessTestCasec��d}d}tj�}||_||_tjt
|��y)Nr�r�r�)r�STARTUPINFO�dwFlags�wShowWindowrVr)r%�STARTF_USESHOWWINDOW�SW_MAXIMIZEr�s    r�test_startupinfoz%Win32ProcessTestCase.test_startupinfoV
s@�� !���� �,�,�.��2���"-���	����$/�	1rc�p�d}d}tj||��}tjt|��y)Nr�r�)r(r)r�)rr'rVr)r%�STARTF_USERSHOWWINDOWr+r�s    r�test_startupinfo_keywordsz.Win32ProcessTestCase.test_startupinfo_keywordse
s8��!"���� �,�,�)�#�
��	����$/�	1rc�h�tj�}tj|_tj|_t
d�D�]M}t}ttjd�5}tj||tj|��}|5|j�ddd�|j|jd�ddd�|j|jtj�|j!|j"�|j!|j$�|j!|j&�|j|j
tj�|j|j(dgi���Py#1swY��xYw#1swY��xYw)Nrfr�)rBrCr�r�handle_list)rr'r*r(�SW_HIDEr)r�rr�rr�rDr�r�rYrr�	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r%r�r�r��nullrxs      r�test_startupinfo_copyz*Win32ProcessTestCase.test_startupinfo_copyu
s]�� �,�,�.��(�=�=���",�"4�"4����q��	O�A�!�C��b�j�j�#�&�
5�$�!�'�'��/3�/9�/@�/@�4?�A���'��$�$�&�'�� � ����!�4�
5�
���[�0�0�'�<�<�
>����k�3�3�4����k�4�4�5����k�3�3�4����[�4�4�j�6H�6H�I����[�8�8�=�"�:M�N�#	O�'�'��
5�
5�s$�.*F(�F�)$F(�F%�!F(�(F1	c��d}tjjd�tjtj
dz|��y)N�z'    a DOS box should flash briefly ...
z# -c "import time; time.sleep(0.25)"r�)rWrCr�rrVrX)r%�CREATE_NEW_CONSOLEs  r�test_creationflagsz'Win32ProcessTestCase.test_creationflags�
s8�����
�
���C�D�������=�>�&8�	:rc�v�|jttjtj
ddgd���y)NrrSc��yr(r4r4rrr�z8Win32ProcessTestCase.test_invalid_args.<locals>.<lambda>�
r�rr�r�r$s rr�z&Win32ProcessTestCase.test_invalid_args�
s1�����*�j�o�o��>�>�4�5�7�%.�	�	0rc��Gd�dt�}|jt�5tjt
|���ddd�y#1swYyxYw)Nc��eZdZdZy)�4Win32ProcessTestCase.test_issue31471.<locals>.BadEnvN)r1r2r3�keysr4rr�BadEnvrA�
s���DrrCr�)�dictrbr�rrDr)r%rCs  r�test_issue31471z$Win32ProcessTestCase.test_issue31471�
sC��	�T�	�
�
�
�y�
)�	<����_�&�(�;�	<�	<�	<�s�!A�Ac�x�tjtjddgd��}|j	|d�y)NrrST)rTrTrUrZs  rr�z#Win32ProcessTestCase.test_close_fds�
s5��
�_�_�c�n�n�d�8�:�(,�.��	
����R� rc	��ddl}tj�}|jtj|d�|jtj|d�g}|D]8}tj
|d�|j
|j|���:tjtjddj|d�gtjd��}|j�\}}|j|j d�t#|j%��tjtjddj|d�gtjtjd��}|j�\}}|j|j d�|j'd	|�g}tj(�}	d
|i|	_tjtjddj|d�gtjtj|	d��}|j�\}}|j|j d�|j'd	|�t-j.dt0f�5tj(�}	d
|ddi|	_tjtjddj|d�gtjtj|	d��}|j�\}}|j|j d�ddd�y#1swYyxYw)
Nrr�Trz2import msvcrt; print(msvcrt.open_osfhandle({}, 0))Fr~)rBrCrTsOSErrorr1)rBrCr�rTz.*overriding close_fds)r4rrjr�rIr�r��
get_osfhandlerrDrWrXr�rEr�rYrr?r�rwr'r6rr�r.)
r%r4r?rrHrKrBrCr1r�s
          r�test_close_fds_with_stdioz.Win32ProcessTestCase.test_close_fds_with_stdio�
s�����g�g�i��������#�a�&�)�������#�a�&�)����	5�B����r�4�(��N�N�6�/�/��3�4�	5�
���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�F����Q�\�\�1�-�		.�		.�		.�s
�B)M�Mc�p�tj�}i|_tjt|��y)Nr��rr'r6rVr�r%r�s  r�test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list�
s)�� �,�,�.��&(��#�����$/�	1rc�t�tj�}dgi|_tjt|��y)Nr1r�rKrLs  r�test_empty_handle_listz+Win32ProcessTestCase.test_empty_handle_list�
s.�� �,�,�.��'4�b�&9��#�����$/�	1rc��tjj�}d|d<tjdgdtj
|��}|5|j
d|jj��ddd�y#1swYyxYw�N�physalisr�r�r�r�sphysalis�	rr�r�rrDrErwrBr	r�s   rr�z(Win32ProcessTestCase.test_shell_sequence�
sm�������"��$��w�����e�W�A�$.�O�O�!'�
)���	8��M�M�+�q�x�x�}�}��7�	8�	8�	8�s�+B�Bc��tjj�}d|d<tjddtj
|��}|5|j
d|jj��ddd�y#1swYyxYwrQrSr�s   rr�z&Win32ProcessTestCase.test_shell_string�
sk�������"��$��w�����U�!�$.�O�O�!'�
)���	8��M�M�+�q�x�x�}�}��7�	8�	8�	8�s�
+B�B
c�,�dD]�}tjj�}d|d<tjddtj
||��}|5|j
d|jj�|�ddd���y#1swY��xYw)N)�ansi�oemrRr�r�r�)r�rBr�r�rS)r%�encr�rKs    r�test_shell_encodingsz)Win32ProcessTestCase.test_shell_encodingss���"�	@�C��Z�Z�_�_�&�F�(�F�7�O�� � ��a�(2���%+�*-�/�A��
@��
�
�j�!�(�(�-�-�/�3�?�
@�
@�	@�
@�
@�s�,B
�
B	c�t�tjtjdz�}|j	|d�y)Nz -c "import sys; sys.exit(47)"rTrUrZs  rr�z%Win32ProcessTestCase.test_call_string
s.��
�_�_�S�^�^�=�>�?������R� rc��tjtjddgtjtjtj��}|5|j
j
d�t||�|�|j�\}}|j|d�|j�}ddd�|jd�y#1swY�xYw)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             time.sleep(30)
                             r@r�rr)rrDrWrXrErBr	r�r�rYr*r6)r%r�r:rKr�rCrs       rr�z"Win32ProcessTestCase._kill_processs������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���	"�
�H�H�M�M�!���G�A�v���%��
�
��I�A�v����V�S�)�����J�	"�	
���J��*�	"�	"�s
�A C�Cc���tjtjddgtjtjtj��}|5|j
j
d�tjd�t||�|�|j�\}}|j|d�|j�}ddd�|jd�y#1swY�xYw)Nrz�if 1:
                             import sys, time
                             sys.stdout.write('x\n')
                             sys.stdout.flush()
                             sys.exit(42)
                             r@r�rr�)
rrDrWrXrErBr	r=r>r�r�rYr*)r%r�r:rKr�rCr[s       rrz'Win32ProcessTestCase._kill_dead_process(s������c�n�n�d�5!�"�$.�?�?�$.�O�O�$.�O�O�
5���
	�
�H�H�M�M�!���J�J�q�M��G�A�v���%��
�
��I�A�v����V�S�)�����B�
	�	
����R� �
	�
	�s
�A5C'�'C0c�D�|jdtj�yr
)r�r�r
r$s rrz%Win32ProcessTestCase.test_send_signal?s�����=�&�.�.�9rc�&�|jd�yr�r�r$s rrzWin32ProcessTestCase.test_killBs�����6�"rc�&�|jd�yrr_r$s rrz#Win32ProcessTestCase.test_terminateEs�����;�'rc�D�|jdtj�yr
)rr�r
r$s rrz*Win32ProcessTestCase.test_send_signal_deadHs�����
�v�~�~�>rc�&�|jd�yrrr$s rrz#Win32ProcessTestCase.test_kill_deadKs������'rc�&�|jd�yrrr$s rrz(Win32ProcessTestCase.test_terminate_deadNs������,rN)r1r2r3r,r/r8r<r�rr!rEr�rIrMrOr�r�rYr�r�rrrrrrrr4rrr%r%S
s���
1�1� O�6:�0�
���<��<�!�0.�d1�1�8�8�
@�!�+�*!�.:�#�(�?�(�-rr%c��eZdZGd�dej�Zejjejd�d��Z	d�Z
d�Zd�Zd�Z
d	�Zy
)�	MiscTestsc�$��eZdZ	gZ�fd�Z�xZS)�MiscTests.RecordingPopenc�Z��t�|�|i|��|jj|�yr")rr��instances_createdr�)r%r:r;rrs   �rr�z!MiscTests.RecordingPopen.__init__Ws)����G��d�-�f�-��"�"�)�)�$�/r)r1r2r3rir�r"r#s@r�RecordingPopenrgSs���J���	0�	0rrj�_communicatec�J�	t|_	tjj	t
jd�5}t|_tjj	t
d|j�5|jt�5|tjddgfdt
ji|��ddd�ddd�|jddD]6}|j|tjd��d|j����8g}|jD]-}|tjd	��k(s�|j|��/|j!|j"d
|j��|j%t'|�d|j��ddd�|jj(j+�}|j-�|j/�|j%g|jj(�y#1swY��ZxYw#1swY��_xYw#1swY��xYw#|jj(j+�}|j-�|j/�|j%g|jj(�wxYw)N�_waitrDrzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rBr�r`z.no open-ended wait() after the first allowed: g�?rfrR)�KeyboardInterruptr�rrsrtrrDrjrbrWrXr^r�r6rVr��assertLessEqual�
call_countrYr�rirror*)r%�popener�mock__communicater;�
mock__waitrV�sigint_callsr�s        r�_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill[s^��	�):��%�	H����"�"�:�#3�#3�W�=�
@��*;�
�&��Z�Z�&�&�z�7�'+�':�':�<�E��*�*�+<�=�E������"M�!N�E�(2�'9�'9�E�>D�E�E�E�'�5�5�a�b�9�<�D��'�'� �$�)�)�D�"9�L�)�8�8�9�;�<�<�
 "��&�5�5�2�D��t�y�y��6�6�$�+�+�D�1�2��$�$�Z�%:�%:�A�)3�)B�)B�%�D�� � ��\�!2�A�%/�%>�%>�!�@�-
@�4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�/E�E��E�E��	
@�
@��4�)�)�;�;�?�?�A�G��L�L�N��L�L�N����R��!4�!4�!F�!F�G�s[�.H6�;H*�7H�
+H�8H�A:H*�;A"H*�H6�H�H�H'	�"H*�*H3�/H6�6A,J"c�F�|jtjd��y�NgT㥛� @r`)rurrVr$s r�#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill�s���,�,�Z�_�_�e�,�Lrc�F�|jtjd��yrw)rurrr$s r�"test_run_keyboardinterrupt_no_killz,MiscTests.test_run_keyboardinterrupt_no_kill�s���,�,�Z�^�^�U�,�Krc�,�d�}|j|�y)Nc�R�tj|i|��5}t�#1swYyxYwr")rrDrn)r:r;�unused_processs   r�popen_via_context_managerz[MiscTests.test_context_manager_keyboardinterrupt_no_kill.<locals>.popen_via_context_manager�s-���!�!�4�2�6�2�
(�n�'�'�
(�
(�s��&)ru)r%r~s  r�.test_context_manager_keyboardinterrupt_no_killz8MiscTests.test_context_manager_keyboardinterrupt_no_kill�s��	(�	
�,�,�-F�Grc���|jtjd�d�|jtjd�d�d}	t	j
�}tjj|d�}tjtrdnd|z�\}}|j|d�|�t
j|�yy#|�t
j|�wwxYw)Nz
echo xyzzy�xyzzy)rr�r�ztype zcat r)rYr�	getoutput�getstatusoutputr�r�rr�r�r(r6�rmdir)r%�dirr�rr{s     r�test_getoutputzMiscTests.test_getoutput�s�������-�-�l�;�W�E�����3�3�L�A�%�	'���	��"�"�$�C��7�7�<�<��U�+�D�'�7�7�%��6�T�9�;�N�F�F������*�������
���s������
��s
�A)C�C*c�H�	hd�}ttj�}t�}ddl}tjj�D]@\}}|j
d�r�t||jf�r�0|j|��B|j|||z
�y)N>r�rXrk�Handlerrr�)r�r�__all__r��__dict__�itemsr�r[�
ModuleTyper�rY)r%�intentionally_excluded�exported�possible_exportsr�r�rks       r�test__all__zMiscTests.test__all__�s���8�!R���z�)�)�*���5���%�.�.�4�4�6�	'�K�D�%����s�#���%�%�"2�"2�!4�5��� � ��&�	'�	
����#3�6L�#L�MrN)r1r2r3rrDrjrrsrtrurxrzrr�r�r4rrrereQs_��0��)�)�0�
�Z�Z���z�'�'��8�)H�9�)H�VM�L�H��&Nrre�PollSelectorz!Test needs selectors.PollSelectorc��eZdZd�Zd�Zy)�ProcessTestCaseNoPollc��tj|_tjt_t
j
|�yr")r�_PopenSelector�
orig_selector�	selectors�SelectSelectorr>r&r$s rr&zProcessTestCaseNoPoll.setUp�s,��'�6�6���$-�$<�$<�
�!����d�#rc�X�|jt_tj	|�yr")r�rr�r>r/r$s rr/zProcessTestCaseNoPoll.tearDown�s��$(�$6�$6�
�!�� � ��&rNr0r4rrr�r��s��$�
'rr�zWindows-specific testsc�F��eZdZ�fd�Z�fd�Zd�Zd�Zd�Zd�Zd�Z	�xZ
S)�CommandsWithSpacesc����t�|��tjdd�\}}|j	�|_t
j|d�t
j|�y)Nz.pyzte stsVimport sys;sys.stdout.write('%d %s' % (len(sys.argv), [a.lower () for a in sys.argv])))	rr&r�r\r�r�rr�rI)r%rRr�rrs   �rr&zCommandsWithSpaces.setUp�sP���
��
���#�#�E�7�3���5��[�[�^��
�
����c�	
�	����rc�`��tj|j�t�|��yr")rr]r�rr/rs �rr/zCommandsWithSpaces.tearDown�s���
�	�	�$�*�*��
���rc��tj|d<tj|i|��}|5|j|jj�j
d�d|jz�ddd�y#1swYyxYw)NrB�mbcsz2 [%r, 'ab cd'])rrErDrYrBr	r
r�)r%r:r;rKs    r�with_spaceszCommandsWithSpaces.with_spaces�sp��%�?�?��x�����d�-�f�-��
�	�����h�h�m�m��%�%�f�-��$�*�*�,�
�	�	�	�s�AA;�;Bc	�n�|jdtj�d|j�dd�d�d��y)N�"�" "�ab cdr�ro�r�rWrXr�r$s r�test_shell_string_with_spacesz0CommandsWithSpaces.test_shell_string_with_spaces�s-�����S�^�^�T�Z�Z�-4�6�=>�	�	@rc�`�|jtj|jdgd��y)Nr�r�ror�r$s r�test_shell_sequence_with_spacesz2CommandsWithSpaces.test_shell_sequence_with_spaces�s$�����#�.�.�$�*�*�g�>�a��Hrc	�j�|jdtj�d|j�dd�d��y)Nr�r�r�r�r$s r�test_noshell_string_with_spacesz2CommandsWithSpaces.test_noshell_string_with_spaces�s$�����S�^�^�T�Z�Z�$�&�	'rc�\�|jtj|jdg�y)Nr�r�r$s r�!test_noshell_sequence_with_spacesz4CommandsWithSpaces.test_noshell_sequence_with_spaces�s�����#�.�.�$�*�*�g�>�?r)r1r2r3r&r/r�r�r�r�r�r"r#s@rr�r��s)������@�
I�'�
@rr�c�*�eZdZd�Zd�Zd�Zd�Zd�Zy)�ContextManagerTestsc���tjtjddgtjtj��5}|j|jj�d�|j|jj�d�ddd�|jjj�|j|jj�y#1swY�TxYw)NrzAimport sys;sys.stdout.write('stdout');sys.stderr.write('stderr');r�sstdoutsstderr)rrDrWrXrErYrBr	rCr�r�rs  r�	test_pipezContextManagerTests.test_pipe�s���
�
�
�s�~�~�t� =�>�&0�_�_�%/�_�_�6�	<�
:>����T�[�[�-�-�/��;����T�[�[�-�-�/��;�	<�	
������*�*�+�������*�*�+�	<�	<�s
�AC.�.C7c��tjtjddg�5}	ddd�|j	j
d�y#1swY�&xYw)Nrzimport sys; sys.exit(100)�d)rrDrWrXrYrrs  rr�z#ContextManagerTests.test_returncode�sQ��
�
�
�s�~�~�t�:�<�=�	�@D��	�	
������#�.�		�	�s�A�Ac���tjtjddgtj��5}|jd�|j
|jd�ddd�y#1swYyxYw)Nrz2import sys;sys.exit(sys.stdin.read() == 'context')r�scontextr�rRrs  rr�z*ContextManagerTests.test_communicate_stdinsi��
�
�
�s�~�~�t�H�I�$.�?�?�4�	1�8<����Z�(����T�_�_�a�0�	1�	1�	1�s�.A.�.A7c���|jt�5tjttj
tj
��5}	ddd�ddd�y#1swY�xYw#1swYyxYw)Nr�)rbr�rrDr�rErs  rr�z%ContextManagerTests.test_invalid_argssd��
�
�
�1�
2�	��!�!�/�)3���)3���:�
�=A��
�	�	�
�
��	�	�s#�9A.�A"�A.�"A+	�'A.�.A7c���	tjttjtj
dz��}|j
�}|jjdtj
z�|j|j�|jt|jddd�|j|jd�|j|jj �y)Nrf)rArNrgr)rrDrrErr��	__enter__rAr�rrrbr��__exit__rYr�r�rs  r�test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanups���G�����&0�o�o�(/�(=�(=�a�(?�A���~�~���	
�
�
����� 5� 5�5�6����$�/�/�*����'�4�=�=�$��d�C�������!�,�����
�
�)�)�*rN)r1r2r3r�r�r�r�r�r4rrr�r��s��,�/�1��+rr��__main__)Hrmrrfr�test.supportrrrr�test.support.script_helperr	rrWr�rGr[rr�r�r=r�r�r�r�r�rrBr�r�r�rp�test.support.os_helperr
rr7rXr�rk�PGOrn�has_subprocess_supportr�r(r�r�r�NotADirectoryErrorr@r�rXrr�TestCaser �	Exceptionr6rDr8r>r�rr�rr�r%rer�r�r�r�r1�mainr4rr�<module>r�s������(�&�"�(�7��
�
�	��	��������
�
��	����+����������;�;�
�(�
�
�9�
:�:��%�%�
�(�
�
�=�
>�>�
�\�\�W�
$�	�
�@�I��I�)��'�);�_�M���>�>�4��0��(� �8�$�$� �&	��	�>�j�.�.�>�cI�l�cI�L/BO�l�BO�J	c������2�3�dP�<�dP�4�dP�N1����Y� 8�9�{-�<�{-�:�{-�zaN��!�!�aN�H����W�Y��7�8�:�'�O�'�:�'�����Y� 8�9�(@�,�(@�:�(@�V3+�,�3+�l�z���H�M�M�O���Gx���I���
��
�C�����
�C���
��E�sB�H�H#�H1�H?�H �H �#H.�-H.�1H<�;H<�?I