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.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��eZdZdZd�Zy)�PopenExecuteChildRaiseszePopen subclass for testing cleanup of subprocess.PIPE filehandles when
    _execute_child fails.
    c��td��)NzForced Exception for Test)r6)r%�args�kwargss   r�_execute_childz&PopenExecuteChildRaises._execute_childps�� �!<�=�=rN)r1r2r3�__doc__r<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�assertIsInstancerB�io�BufferedIOBaserCrD�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)rBrCrD�bufsize)rrErrFrGrBrH�	RawIOBaserCrDrJr*rKs  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�TimeoutExpiredrWrXrYr$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_callrrZr[s  r�test_check_call_zeroz$ProcessTestCase.test_check_call_zero�s"��
�
"�
"�?�
3������Q�rc��|jtj�5}tjtj
ddg�ddd�|j
jjd�y#1swY�0xYwrS)	rcr�CalledProcessErrorrhrXrYrZ�	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�rCz1check argument not allowed, it will be overriddenF��check)r�check_outputrXrY�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)�)	rcrrkrwrXrYrZrlrrms  r�test_check_output_nonzeroz)ProcessTestCase.test_check_output_nonzero�sk��
�
�
�z�<�<�
=�	G���#�#��^�^�T�+D�E�
G�	G�	
������/�/��3�	G�	G�rpc��tjtjddgtj��}|jd|�y)Nr�$import sys; sys.stderr.write('BDFL')�rDrs)rrwrXrY�STDOUTrxr{s  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())�rB�PEAR)�tempfile�
TemporaryFile�
addCleanuprJ�write�seekrrwrXrYrx)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��rrwrXrYrxr{s  r�test_check_output_input_argz+ProcessTestCase.test_check_output_input_arg�s7���(�(�����I�K����	
�
�
�g�v�&rc�x�tjtjddgd��}|j	d|�y)z<input=None has a legacy meaning of input='' on check_output.r�3import sys; print('XX' if sys.stdin.read() else '')Nr�sXX�rrwrXrY�assertNotInr{s  r�test_check_output_input_nonez,ProcessTestCase.test_check_output_input_none�s9���(�(�����F�H����	
�����'rc�z�tjtjddgdd��}|j	d|�y)Nrr�T)r��text�XXr�r{s  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�r{s  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�r{s  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')rtz-Expected ValueError when stdout arg supplied.rCr)rcrzrrwrXrYrC�failrxrlr:�r%rnr|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�rBr��7Expected ValueError when stdin and input args supplied.rBr�)r�r�r�rJr�r�rcrzrrwrXrYr�rxrlr:�r%r�rnr|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)�razExpected TimeoutExpired.rs)
rcrrdrwrXrYr�rZrlr|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�copyrrWrXrYrZ)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_stderrrc�	TypeErrorrrE�__init__�__code__�co_argcountrZ�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")�rCrD)rrErXrYrFr�rCrJrDr*rZrBrKs  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�
rrErXrYrFr�rCrJrD�communicaterZr�rstrip�r%�coderL�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��rBrC)rrErXrYrFr�rCrJrBr*rZrDrKs  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�NrTrU)rrEr*rZr)r%�pre_argsr;r:rLs     r�_assert_pythonzProcessTestCase._assert_python]sD���5�6�6�����T�,�V�,��	��������Q�\�\�*rc���tjjtjjtj
�d�}|j
|dgtj
��y�N�doesnotexistr�rY)r�path�join�dirnamerXrYr��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�rXrYr��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�rXrYr�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�)rXrYr�rc�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)rY�shell)r�rXrYr$s r�test_executable_replaces_shellz.ProcessTestCase.test_executable_replaces_shell�s��	
���B�3�>�>���Frc�n�|jgtjtj�d��yr�)r�rr�rXrYr$s r�$test_bytes_executable_replaces_shellz4ProcessTestCase.test_bytes_executable_replaces_shell�s)�����B�2�;�;�s�~�~�+F�"&�	�	(rc�Z�|jgttj�d��yr�)r�r
rXrYr$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��realpathrXrY�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)rCrU)rrErFr�rCrJr*rZrrr��normcase�read�decode)r%�expected_cwd�
python_argr;rLr	s      r�_assert_cwdzProcessTestCase._assert_cwd�s���
���j�$�-�.�
(�&0�_�_�

(�!'�
(��	
��������'�	��������Q�\�\�*��7�7�#�#������,�/�!�!�(�(�-�-�/�"8�"8�":�;�	=rc��tj�}|j|�}|j|tj
|��y�N�r)r��
gettempdirrrrXrY�r%�temp_dirs  r�test_cwdzProcessTestCase.test_cwd�s9���&�&�(���&�&�x�0������3�>�>�x��@rc��tj�}|j|�}|j|tj
t
j|���yr)r�rrrrXrYrr�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�rrrrXrYr
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_cwdrc�FileNotFoundErrorrrErr)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��rYrr)r%rr r!�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�rrrrcrrrErr)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&)rrrrXrY)r%rr s   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�)rrrrXrYr$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�)rrErXrYrFrBr�rJr*rZrrKs  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�rrr1r�r�)r�r�r�rJ�filenorr��lseekrrErXrYr*rZr�r%r��drLs    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�yr4)
r�r�r�rJr�r�rrErXrYr*rZr�r%r�rLs   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")rt�orange�rrErXrYrFrZrCr
rKs  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>rtr�r?�r�r�r�rJr5rrErXrYr*rr6rZr
r7s    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>rtrr?�r�r�r�rJrrErXrYr*r�rZr
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)rrErXrYrFrZrDr
rKs  r�test_stderr_pipez ProcessTestCase.test_stderr_pipeMs^�����c�n�n�d�F�H� *���
1���	=����Q�X�X�]�]�_�m�<�	=�	=�	=�rBc�l�tj�}|j|j�|j	�}tjtjddg|��}|j�tj|dd�|jtj|d�d�y)NrrKr�rrDrLrEr7s    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)NrrKr�rrLrHr;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�rrErXrYrFr�rZr�r%rLrCrDs    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)	rrErXrYrFr�rZrCr
rKs  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)NrrWr�rrXrHr;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)rt)rrErXrY�DEVNULLr*rZrCrKs  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�)rrErXrYr_r*rZrDrKs  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�)rrErXrYr_r*rZrBrKs  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!")�rBrCrD�pipesizer�)r�pipe�fcntlrerJr�get_pagesize�unittest�SkipTestrrErXrYrFrBrCrDrZr5r��killr*)r%�test_pipe_r�test_pipe_w�pipesize_defaultrj�pagesize_defaultrL�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)Nrrh���ri)rrErXrYrFrrkrlrerJrZrBr5rCrDrp)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"))�rCr�r?)
rr�r�rrErXrYrFr�rZ�r%r�rLrCrDs     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�fruitr�r�r��frUit��CMDz/c�SETr�r�sfrUit=banana)	rr�r�rrErFr�rZ�strip)r%r�rLrC�_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)z+Verify that env={} is as empty as possible.c�X�d|vxs%d|vxs|dk(xs|jd�xs|dk(S)z:Determine if an environment variable is under our control.�	VERSIONER�__CF�
LD_PRELOAD�SANDBOX�LC_CTYPE)�
startswith)�ns r�is_env_var_to_ignorez<ProcessTestCase.test_empty_env.<locals>.is_env_var_to_ignore3sF��
 �1�$�$��!��$���%�$�)*���i�)@�$���O�
%rrz)import os; print(list(os.environ.keys()))r�N)rrErXrYrFr��evalr�rG�listrZ)r%r�rLrCrD�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�AB5�B0�B5�0B5�5B>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�r�rz;import sys,os;sys.stdout.write("fruit="+os.getenv("fruit"))rr�)rCrDr�zSTDOUT:�ascii�replacezSTDERR:rsfruit=orange)rXrY�platformrrErFr�rr�verbose�printrrZr�)r%r��cmdrLrCrDs      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#)rXrYrcrzrrE)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�rcrzrrErrXrYrFr�rZr�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�rcrzrrEr)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�rSrKs  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")rt�	pineapple�rrErXrYrFr�rZrTs    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�rTs    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())rA�bananar�)rrErXrYrFr�rCrJrDrBr�rZrTs    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�rBrCrDr�g333333�?raspineapple
pear
)
rrErXrYrFrcrdr�rZ�encoderTs    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));rtg�������?rai)
rrErXrYrFrcrdr�rZ�len)r%rLrCr�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�FTrBrCrD)
rrFrErr�rB�
assertTrue�closedrCrD)r%�
stdin_pipe�stdout_pipe�stderr_pipe�optionsrLs      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)NrrT)rrErXrYr�rZrTs    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())rA�a)rrkrJrrErXrYr�
PIPE_MAX_SIZErFr�rCrDrBr�rZ)r%�x�yrL�string_to_writerCrDs       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())rAr�ssplitsbananasplitr)
rrErXrYrFr�rCrJrDrBr�r�rZrTs    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�rBrCTzline1
zline3
zline2
�zline4
line5
line6
line7
line8)rXrY�	SETBINARYrrErFrBr��flushrZrC�readlinerJr�r
)r%r:�extra_kwargrLs    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�)rDrCr�z#line2
line4
line5
line6
line7
line8)rrErXrYr�rFr�rCrJrDr�rZrTs    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�)rBr��line1
line3
r)rrErXrYr��textwrap�dedentrFr�rZrrTs    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)rBrCr�r)rrErrFr�rZrrKs  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)rBrDrCr�r�rzline1
line2
line3
line4
line5
zeline2
eline6
eline7
)rrErXrYr�r�r�rFr�rCrJrDr�rZrr�r�rTs    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)rBrCr�rr�z1
2
3
4)rXrYrrErFr�rZ)r%r�r�r:�popenrCrDs       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�)rBrCr�r�rr�z[{}])rXrYrrErFr�rZ�format)r%r��expectedr�r:r�rCrDs        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())rAslimer)r(r��mkdtemp�rangerr�r�r�TESTFN�append�open�O_WRONLY�O_CREAT�OSError�errno�EMFILE�skipTestrJ�poprrErXrYrFr�rZr�rmtree)
r%�max_handles�handles�tmpdir�i�tmpfile�erL�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 cr8rz"a b c" d e)�ab"c�\r8z	ab\"c \ d)r
z \r8z
ab\"c " \\" d)za\\\bzde fgr
za\\\b "de fg" h)za\"brnr8z
a\\\"b c d)za\\b cr8rz"a\\b c" d e)za\\b\ cr8rz
"a\\b\ c" d e�abrzab "")rZr�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)rrErXrYrFr�rBrJ�assertIsNone�pollrr�r5r*rZrKs  r�	test_pollzProcessTestCase.test_poll�s������c�n�n�d�8�:�#-�?�?�
4��	
������
�
�&����!�&�&�(�#�
��������!�4�(�	�����������1�%rc��tjt�}|j|j	�d�|j|j	�d�yrg�rrErrZr*rKs  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?raz0.0001r)
rrErXrYrcrdr*rx�strrlrZr�
SHORT_TIMEOUT)r%rLrns   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�)rcr�rrErr$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)rOrrKs  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�)rBrCrDrOr�r)rrErXrYrFr_rBr�rrJr5rCr�r�SuppressCrashReportr�rZr)r%�liner�r�rL�	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)NrDr�)r�rcr�rrEr�rF)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)rDr�r�r)�msvcrt�CrtSetReportMode�AttributeError�ImportErrorrr�r�r�rXrYrrErFr�rZr)r%r5r�r�ryrDs      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��extendrrk�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)�targetrA)
�	threading�Thread�startrc�EnvironmentErrorrrEr�rFr�rrJr�)r%rA�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	dd
|fd|fg��y)z?Issue21291: Popen.wait() needs to be threadsafe for returncode.rzimport time; time.sleep(12)Nc����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�rrpr*r)ry�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����raz*unexpected result in wait from main thread��msgz&unexpected result in second main wait.)rMNrNrO)rrErXrYrZrrC�TimerrEr(r*rrr�)r%rQrG�expected_errorcoderyrPs    @@r�test_threadsafe_waitz$ProcessTestCase.test_threadsafe_wait�s
����������!>�!@�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�rrwrXrYr�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�*rA)r��mkstemprrEr�rrJ�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)NrA�x�)
rrErrFr�rCrJrDrBr�rKs  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...>rlFz&<Popen: returncode: None args: ['ls']>)rlz	--my-optsrnzP<Popen: returncode: None args: ['ls', '--my-opts', 'aaaaaaaaaaaaaaaaaaaaaaaa...>�z<Popen: returncode: 7 args: z('my-tool.py')>r<�r�)
�pathlib�Path�	__class__r1rnr�patch�objectrrErrZ�repr)	r%�path_cmd�pathlib_cls�casesr�r�r��sxrLs	         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�rhri)	rrErrFr�rBrJr*r�rKs  r�!test_communicate_epipe_only_stdinz1ProcessTestCase.test_communicate_epipe_only_stdinsH�����_�#-�?�?�
4��������
�
�&�	����	�
�
�d�U�l�#r�SIGUSR1zRequires signal.SIGUSR1rpzRequires 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�rXrYrrFrEr�)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�x�dtj�z}tj|�}|jt�5tttjtjtj��ddd�tj|�}|j||�y#1swY�1xYw)z;Test for the fork() failure fd leak reported in issue16327.r�rAN)
r�getpid�listdirrcr6r8rrrFrZ)r%�fd_directory�fds_before_popen�fds_after_exceptions    r�!test_failed_child_execute_fd_leakz1ProcessTestCase.test_failed_child_execute_fd_leak(s���%�r�y�y�{�2���:�:�l�3��
�
�
�1�
2�	D�#�#�:�?�?�%�?�?�:�?�?�
D�	D�!�j�j��6�����)�+>�?�	D�	D�s�>B0�0B9z+behavior currently not supported on Windowsc���|jt�5}tjgd��ddd�|j	j
jd�y#1swY�0xYw)N)�/opt/nonexistent_binary�with�somer:r�)rcrrrWrZrl�filenamerms  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)rcrrrErZrlr�rms  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")rGrrE�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 argsrrrx�
_USE_VFORKF)r�rr��RuntimeError�side_effectrcrrXrY�assert_called_once�	call_argsr:rrtrur,�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)�r1r2r3rMrQr]reriror}r�r�r�r�r�r�r�r�r�r�r�requires_resourcer�r�r�r�r�r�r�r�r�r�r�rn�skipIfr(r�r�r�rrrrrrr#r(r+rX�base_prefix�prefixr-�	sysconfig�is_python_buildr/r2r9r<rArFrIrMrOrQrUrYr[r]r`rbrd�
skipUnlessrl�hasattrrvr~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�rrrrrr r"r'r+r0r3r9rJrWrZrfrjr{r}r�rr�r��isdirr�r�r�r�r�rrtr�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�T�tjd|g}tj|fi|��S)z4Run Python code in a subprocess using subprocess.runr�rXrYrr)r%r�r;�argvs    r�
run_pythonzRunFuncTestCase.run_python[s&������d�+���~�~�d�-�f�-�-rc���|jd�}|j|jd�|jtj
�5|j
�ddd�y#1swYyxYwr�)r�rZrrcrrk�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)NrTTrurU)rcrrkr�rZrlrrms  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)NTrur)rrrrZrr�s  r�test_check_zerozRunFuncTestCase.test_check_zerols&��
�^�^�O�4�
8���������*rc��|jtj�5|jdd��ddd�y#1swYyxYw)Nr_rra)rcrrdr�r$s r�test_timeoutzRunFuncTestCase.test_timeoutqsB��
�
�
�z�8�8�
9�	@��O�O�.��O�?�	@�	@�	@�s	�=�Ac�~�|jdtj��}|jd|j�y)Nrrrtrs�r�rrFrxrCr�s  r�test_capture_stdoutz#RunFuncTestCase.test_capture_stdoutys*��
�_�_�_�Z�_�_�_�
E���
�
�g�r�y�y�)rc�~�|jdtj��}|jd|j�y)Nr�r�rs)r�rrFrxrDr�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�rJr�r�r�rrFrxrC)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�rCr�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�rSr�r�r�rBr�)r�r�r�rJr�r�rcrzr�rxrlr: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�)rbrCrs)	rcrrdr�rFrZrlr|rC)r%rnr�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�rZr)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.comrlz required for this testrtrT)rCr�)r(rrrr
rrr_rZrrcr�)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�rXrYrrrZr�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
rXrYrrrZrr�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_outputrssFLUFL)r�rxrCrDr�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.rSr�T)r�rCrCrr��
r�r�r�rJrcrzr�rxrlr: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.rSr�T)r�rDrDrr�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�H�tj�}	tjdddd��|j	d�|j|z
dd�d	��
�y#tj
$r2}tj�}t
j�}Yd}~�\d}~wwxYw)zJOutput capturing after a timeout mustn't hang forever on open filehandles.zsleep 3Tr`)r�rbr�zTimeoutExpired not raised.Ng�?z/TimeoutExpired was delayed! Bad traceback:
```
z```rS)	r>�	monotonicrrr�rd�	traceback�
format_exc�
assertLess)r%�before_secsrH�
after_secs�stackss     r�.test_run_with_shell_timeout_and_capture_outputz>RunFuncTestCase.test_run_with_shell_timeout_and_capture_outputs����n�n�&��	4��N�N�9�D�#�*.�
0�
�I�I�2�3����
�[�0�#�O�!�(�#�'�	�	(���(�(�	,����)�J��)�)�+�F��	,�s�A�B!�/(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�rgrs<string>:2: EncodingWarning: r�s<string>:3: EncodingWarning: )r�r�rrrXrYrD�
splitlinesrZr�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�rnr�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�KeyErrorrnro)�
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%rss �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)z;Test error in the child raised in the parent for a bad cwd.rrr�Expected OSError: %sN�r
rrErXrYrr�r�rZr��strerrorr��r%rrLrs    r�test_exception_cwdz'POSIXProcessTestCase.test_exception_cwd?s��� �5�5�7��
	B�� � �#�.�.�$��!;�%)�%:�%:�<�A�
�I�I�,�/@�@�A���	E�
���.�4�4�a�g�g�>����.�7�7����D����.�7�7����D�D��	E���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)zBTest error in the child raised in the parent for a bad executable.rrr�rNrrs    r�test_exception_bad_executablez2POSIXProcessTestCase.test_exception_bad_executableNs��� �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)z?Test error in the child raised in the parent for a bad args[0].rrrN)
r
rrErr�r�rZr�rr�rs    r�test_exception_bad_args_0z.POSIXProcessTestCase.test_exception_bad_args_0]s��� �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)z>Test error passing done through errpipe_write in the good casec��|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_commandN)r�rrt�ChildProcessErrorrc�IsADirectoryErrorr)r%�	fork_execr%s   r�test_exception_errpipe_normalz2POSIXProcessTestCase.test_exception_errpipe_normalvs|��	�!-�	��
�Z�Z�/�$5�7�	A��"�"�#4�5�
A��&�&�(>�'?�@�
A�	A�	A�
A�
A��	A�	A�s"�A,�A �A,� A)	�%A,�,A5c�j��d��fd�}||_tjdt��5|j	t
j�5}|jdg�ddd�ddd�|jt��tj��y#1swY�@xYw#1swY�DxYw)zZTest error passing done through errpipe_write where its not
        in the expected formats�ޭc�<��|d}tj|��y)Nr r)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(N)r�rrtr)rcr�SubprocessErrorrrxrvrrl)r%r+r0rr/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)�)B2�/proc/self/statuszneed /proc/self/statusc�Z�tjddgd��}|j�D]}|jd�s�|}n|j	d�tjddgd��}|j�D]}|jd�s�|}n|jd�	�y)
N�catr3F)�restore_signalssSigIgnz&SigIgn not found in /proc/self/status.Tz=restore_signals=True should've unblocked SIGPIPE and friends.rS)rrwr�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)rrwrXrYr�getsid�intr7�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)rrwrXrYrrHr@r7rAr�rB)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�%�+�+�%��&��	�rF�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())rx�rT�)rr�rT)r�geteuidrXr��pwd�getpwnamr�r�subTestrrwrY�
isinstancer�pw_uidr@rZrAr��EACCESr�rrcrzrhr�
OverflowErrorrr�)
r%�uid�
test_users�name_uidrTrUr|�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�rV�rcrzrrhrr$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)NrPrQr�)�grouprUrzimport os; print(os.getgid())rx�rmrW)rr�rm)r�getegidrr�r�r[rrwrXrYr\rr�gr_gidr@rZrArr�rcrzrhrr_rr�)
r%�gid�
group_listrrmrUr|�	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)Nrgrnrhr$s r�test_group_errorz%POSIXProcessTestCase.test_group_error:s9��
�
�
�z�
*�	@��!�!�/��?�	@�	@�	@�rj�	setgroupszno setgroups() on platformc�f�tj�}|dk7rdndg}|j||��y)NrPrQ�rqrr)rro�_test_extra_groups_impl)r%rqrrs   r�test_extra_groupsz&POSIXProcessTestCase.test_extra_groups?s0���j�j�l��"�e�|�e��7�
��$�$���$�Drc�N�|jtj�g��y)Nrz)r{rror$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�rrwrXrYr�	getgroups�json�loadsr\rrrprZ�setrArr�rrcrzrhr)
r%rqrrrr|�
parent_groups�child_groups�g�desired_gidsrs
          rr{z,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)Nrxr�rW)rr�r�)rcrzrrhrrrr�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 != rS)r�r�rr�r�rrhrXrY�stat�st_moderZ�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$rrErXrYr*rZrr��SIGABRTrKs  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)rrkr@r�r�rrx�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.�rrkrrxr�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)Nrgr�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)rC�
preexec_fn�appler@rKs  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?�rzr4rr�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)rrErXrYr�r1r��
_fork_execrzrxr:)r%r�rLrs    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��eZdZdZd�Zd�Zy)�+POSIXProcessTestCase._TestExecuteChildPopenz3Used to test behavior at the end of _execute_child.c�X�||_tjj|g|��i|��yr")�	_testcaserrEr�)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.rS)rrEr<r�rr��O_RDONLYr�r�rBr5rCrDrJ)r%r:r;r��devzero_fdsrIs      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�r<r4rr�_TestExecuteChildPopenr��s��A�	=�	%rr�r�z/dev/zero required.c	��d�}|jtj�5|j|ttj
tj
tj
|��ddd�y#1swYyxYw)z6Issue16140: Don't double close pipes on preexec error.c�,�tjd��)Nz-force the _execute_child() errpipe_data path.)rr1r4rrr�zWPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes.<locals>.raise_it�s���,�,�C�E�
Er)rBrCrDr�N)rcrr1r�rrF)r%r�s  r�0test_preexec_errpipe_does_not_double_close_pipeszEPOSIXProcessTestCase.test_preexec_errpipe_does_not_double_close_pipes�sf��	E��
�
�z�9�9�
:�	E��'�'��o�(�o�o�j�o�o�)���8�
(�
E�	E�	E�	E�s�AA2�2A;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,rrWrXrY�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�6ErRz!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�r8rr�rrWrXrY�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�rU)r�r]r�r�r�
unix_shellrXrYr�chmodrrEr*r^rZr)r%rI�fname�fobjrLs     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)NrrTrU��startupinfo��
creationflags�rcrzrrWrXrYr$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�rCr�s 	
r��
rr�r�rrErFrZrCr
r��r%r�rLs   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�rXrYrr�rrWr^rZ)r%rIr�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)rYr�rCr�)rr�r��isfiler�r�islinkrrErFrZrCr
r�r�)r%�shellsr�r��shrLs      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�rUrBrCrDr�)r��SIGINT�default_int_handlerrrErXrYrFrCr
�getattr)r%�methodr:r�rLs     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�)rrErXrYrFrCr
r>r?r�r�)r%r�r:rLs    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�rxr7r*�r%rLr�rDs    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)Nrpr)r�r�rZr*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�rZr*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�Nrp�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@rI�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�dup2rJ)r%r@rIrrs     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)NrrrWrAr�r?)rrrJrrErXrYrFr�rZr )	r%r@rB�	saved_fdsrIrrr�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�yrg�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)Nrgr%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)Nrrgr%r$s r�test_close_fds_0_2z'POSIXProcessTestCase.test_close_fds_0_2�	r/rc�*�|jddg�y)Nr�rgr%r$s r�test_close_fds_1_2z'POSIXProcessTestCase.test_close_fds_1_2�	r/rc�*�|jgd��y)N)rr�rgr%r$s r�test_close_fds_0_1_2z)POSIXProcessTestCase.test_close_fds_0_1_2�	s��	
� � ��+rc�x�tjd�}tjd�}	tjd�tjd�tjt
jddg�j�tj|d�tj|d�tj|�tj|�y#tj|d�tj|d�tj|�tj|�wxYw)z=Issue #15798: Popen should work when stdio fds are available.rr�rz*print('AssertionError:0:CLOEXEC failure.')N)	rrrJrrErXrYr*r)r%�	new_stdin�
new_stdouts   r�test_small_errpipe_write_fdz0POSIXProcessTestCase.test_small_errpipe_write_fd�	s����F�F�1�I�	��V�V�A�Y�
�	!��H�H�Q�K��H�H�Q�K�

����N�N�D�@�B�
C�CG�4�6�
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� ��
�G�G�I�q�!��G�G�J��"��H�H�Y���H�H�Z� �s
�AC!�!AD9c��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")rgrArD�	got STDIN�err)r�r�r]r�unlinkr�r6r�	enumeraterrrErXrYr*r r
r�rZrJ)r%r�tempsrIr��temp_fdsr"�temp_fdrLr�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<rArDr=r>)r�r�r]rr?rr@rr�r6rrErXrYr*r
r�r rZrJ)r%�stdin_no�	stdout_no�	stderr_norrArIr�rBr"rCrLr�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�rg)rIr$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�rAz�
                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'))
            rrrDr�z"
                    When testing z to z4 redirection,
                    parent descriptor z5 got redirected
                    to descriptor(s) z instead of descriptor z.
                )rr�r�r�rrr5r�rrJ�zipr�r�rrWrXrYrrZr6�SEEK_SETr
r��mapr@rr )r%�from_fds�to_fdsr"�from_fd�f�fd_to_close�	arg_namesr;�to_fdr��
skipped_fdr\�
read_bytes�read_fdsrTs                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�rg)�	itertools�combinationsr��permutationsrZ)r%rPrQs   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.SubprocessErrorrbz!Exception occurred in preexec_fn.)rrWrr�rzrr�rZrr1�assertIsNotNone)r%rcr�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�rvrr�r�rrwrXrYr�rZrr�)r%�key�value�
encoded_value�scriptr��
decoded_valuerCs        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�Trp�PATHr�sPATH)rr�rr�r�rrrWrZr�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)rBrCrDrUr�rCrU�,zExpected no fds from z to be open in child, found )r�findfilerrErXrYrFr�r�r�rOr@rrBr5rCrDr,)	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.pyr{r|zqgrep.pyszxcvbn��
F)rBrCrUc�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�rrErXrYrFrCr�r*rBr�rJ�selectr�rZr
)r%�qcat�qgrep�subdatar	r�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~r{r|rr��	TFrr�zSome fds were closedzSome fds were left openzSubprocess failedc3�>�K�|]}�j����y�wr")r)�.0r�rAs  �r�	<genexpr>z6POSIXProcessTestCase.test_close_fds.<locals>.<genexpr>Es�����;�Q�(�,�,�.�;�s�r��rCrU�pass_fdsz'Some fds not in pass_fds were left open)rr�rrkr�rJr�r�r��devnullr��add�set_inheritablerrErXrYrFr�rOr@rrZr,rx)r%r�r@r�rIrLr|�ignored�
remaining_fds�fds_to_keeprAs          @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�`�tjdd��}tjtj
dt
jd|z�gtj��}|j�\}}|j�}|jt|�dd|z�	�ttt|d
j!�j#d���}ttt|dj!�j#d���}|j%||zd
�	�y)z;Confirm that issue21618 is fixed (may fail under valgrind).r~r{r|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))
        rtrgz(expected exactly two lines of output:
%rrSrr�r�zSome fds were left open.N)rr�rrErXrYr�r�rFr�r�rZr�r�rOr@r�rr,)r%r�rLr|�
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��
�$�$�^�<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�rc	���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~r{r|rrr�Tr�r�zfd to be passed not passedzfd to be closed passedF)rUr�zoverriding close_fds)rr�r�r�rrkr�rJr��updaterrErXrYrFr�rOr@rrxr,�assertWarnsr/rWrr�warning)r%r�rAr�r@rIrLr|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~r{r|TFr�r�z	output=%a)rr�rrkr�rJr�rXrYr�rOrrrErFr�r�r@rrZr)
r%rnr�non_inheritabler�r:rLr|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�L�tjdd��}g}td�D]e}tjtj
tj�}|jtj|�|j|��gtj�\}}|jtj|�|jtj|�|jd|�tjtj|g|d|d|dd|��5tj |d	�}d
d
d
�j#d�D�chc]
}t%|���}	}|j'|	hd�t)|�zd
|���y
#1swY�UxYwcc}w)z7Regression test for https://bugs.python.org/issue32270.r~r{r|rgr�rT)rBrCrDrUr�rDNr�>rr�rgzoutput=)rr�r�rr�r��O_RDWRr�rJr�rk�insertrrErXrYr
rr@rZ�	frozenset)
r%r�r�r�rI�stdout_r�stdout_wr|�numr@s
          r�test_pass_fds_redirectedz-POSIXProcessTestCase.test_pass_fds_redirected�sK���$�$�^�<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+)rCrB�rHr�rr�rrErr*�r%�inoutrLs   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�)rDrBr�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.pyr{r|r�rz6sigchild_ignore.py exited non-zero with this error:
%sr�)rr�rrErXrYrFr�rZrr)r%�sigchild_ignorerLrCrDs     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)rCrOr�sapplg)r�
import_modulerrErXrYrFrCr�rJrZr
rxr�r*)r%r�rLrSs    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)rrErXrYrFr�rCrJrD�id�pidr�check_warnings�ResourceWarningr(rr)rx)r%rL�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rRr)rrErXrYrFr�rCrJrDr�r�rr�r�r�
gc_collectrrpr�rr(rr)rxr>r?rcr�r��waitpidr�)r%rLr�r�r�rys      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~r{r|r�Tc�0��tjd��Sr))rr)rIs�rr�zCPOSIXProcessTestCase.test_close_fds_after_preexec.<locals>.<lambda>ys�������2��r)rCrUr�r�)rr�rrr�rJrrErXrYrFr�r�rOr@rr�)r%r�rLr|r�r�rIs      @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�rrmsexe�envsargTr4rxr�rgr�r�Fz
takes exactly)�_posixsubprocessr�r�r�rcr�r+r�rrlr�)	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")rl)r%rls  rr�zSPOSIXProcessTestCase.test_fork_exec_sorted_fd_sanity_check.<locals>.BadInt.__init__�s	��"��
rc�L�|jrd|_|jSt�)NF)�firstrlrzr$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�)rxrgr�r�r)rr�)���*l)rr�)r�roror�r�rgzfds_to_keep={}rSsfalseTr�rxr�r�r�)r�r�r�r�rcrzr�r+rxrrlr�)r%r�r�r�r�rns      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)NrB)rrErrrtru�BrokenPipeErrorrJr�r��assert_called_with�r%ry�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)NrB�stuff)rrErrrtrur�r�r�r��assert_called_once_withrJr�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�rB�wbr)rrErXrYrFrrtrur�rr�r�r�r�r5�return_valuer�r)r%ryr��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�rBi�ra)
rrErXrYrFrrtrur�rJr�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�Z�t}tj|�}tj|j
d��t
jd�}tjd|j
|f��5|j�}ddd�|jd�y#1swY�xYw)zATest wait() behavior when waitpid returns WIFSTOPPED; issue29335.r�rwr�r&)rN���)rrrEr�wait_processr��	_testcapirrrtr*rZ)r%r:ry�statusrs     r�test_stoppedz!POSIXProcessTestCase.test_stopped
s���
������%��	���T�X�X��2��%�%�a�(��
�Z�Z�/�t�x�x��>P�
Q�	%�����J�	%�	
����R�(�	%�	%�s�5B!�!B*c��tjt�}tj|j
d��|j
|j�tjd�5}|jtj�ddd�j�|j|j�y#1swY�5xYw)Nrr
zos.kill)rrErrrr�rrrrtrr�r�assert_not_calledrd)r%ry�	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)
rrErXrYrrrrtrurr�rrprKs  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)rtr`ra)rrErXrYrFr�rd�r%rys  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	rZrx)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
rrrrrErrrtr,r2rnr�rr�r_r<rEr�r�rMrerirurwr|r~r{r�r(r�r�r�r�r�r�r�r�r�r�rXr�r�r�r�r�r�r�r�r�r�rrrrrrrrr r#r&r*r,r.r1r3r5r9rDrIrKrZr_rerpryr�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__�rss@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�wShowWindowrWr)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(rWr)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)Nrgr�)rCrDr�r�handle_list)rr(r+r)�SW_HIDEr*r�rr�rr�rEr�r�rZrr�	hStdInput�
hStdOutput�	hStdError�lpAttributeList)r%r�r�r��nullrys      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�)rXrDr�rrWrY)r%�CREATE_NEW_CONSOLEs  r�test_creationflagsz'Win32ProcessTestCase.test_creationflags�
s8�����
�
���C�D�������=�>�&8�	:rc�v�|jttjtj
ddgd���y)NrrTc��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�BadEnvrB�
s���DrrDr�)�dictrcr�rrEr)r%rDs  r�test_issue31471z$Win32ProcessTestCase.test_issue31471�
sC��	�T�	�
�
�
�y�
)�	<����_�&�(�;�	<�	<�	<�s�!A�Ac�x�tjtjddgd��}|j	|d�y)NrrTT)rUrUrVr[s  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)rCrDrUsOSErrorr2)rCrDr�rUz.*overriding close_fds)r5rrkr�rJr�r��
get_osfhandlerrErXrYr�rFr�rZrr@r�rxr(r7rr�r/)
r%r5r@rrIrLrCrDr2r�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(r7rWr�r%r�s  r�test_empty_attribute_listz.Win32ProcessTestCase.test_empty_attribute_list�
s)�� �,�,�.��&(��#�����$/�	1rc�t�tj�}dgi|_tjt|��y)Nr2r�rLrMs  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�rrErFrxrCr
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#1swYyxYwrRrTr�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�oemrSr�r�r�)r�rCr�r�rT)r%�encr�rLs    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)"rUrVr[s  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)
                             rAr�rr)rrErXrYrFrCr
r�r�rZr*r7)r%r�r:rLr�rDrs       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)
                             rAr�rr�)
rrErXrYrFrCr
r>r?r�r�rZr*)r%r�r:rLr�rDr\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�rr$s rrz%Win32ProcessTestCase.test_send_signal?s�����=�&�.�.�9rc�&�|jd�yr�r�r$s rrzWin32ProcessTestCase.test_killBs�����6�"rc�&�|jd�yrr`r$s rrz#Win32ProcessTestCase.test_terminateEs�����;�'rc�D�|jdtj�yr)rr�rr$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-r0r9r=r�rr"rFr�rJrNrPr�r�rZr�r�rrrrrrrr4rrr&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�&��eZdZdZgZ�fd�Z�xZS)�MiscTests.RecordingPopenz<A Popen that saves a reference to each instance for testing.c�Z��t�|�|i|��|jj|�yr")rr��instances_createdr�)r%r:r;rss   �rr�z!MiscTests.RecordingPopen.__init__Ws)����G��d�-�f�-��"�"�)�)�$�/r)r1r2r3r=rjr�r#r$s@r�RecordingPopenrhSs���J���	0�	0rrk�_communicatec�H�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)
a�Fake a SIGINT happening during Popen._communicate() and ._wait().

        This avoids the need to actually try and get test environments to send
        and receive signals reliably across platforms.  The net effect of a ^C
        happening during a blocking subprocess execution which we want to clean
        up from is a KeyboardInterrupt coming out of communicate() or wait().
        �_waitrErzLimport time
time.sleep(9)
import sys
sys.stderr.write('\n!runaway child!\n')rCNr�raz.no open-ended wait() after the first allowed: g�?rgrS)�KeyboardInterruptr�rrtrurrErkrcrXrYr_r�r7rWr��assertLessEqual�
call_countrZr�rjrrpr*)r%�popener�mock__communicater;�
mock__waitrW�sigint_callsr�s        r�_test_keyboardinterrupt_no_killz)MiscTests._test_keyboardinterrupt_no_kill[sY��):��%�	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[�.H5�;H)�6H�+H�7H�?A:H)�:A"H)�H5�H�H�H&	�!H)�)H2�.H5�5A,J!c�F�|jtjd��y�NgT㥛� @ra)rvrrWr$s r�#test_call_keyboardinterrupt_no_killz-MiscTests.test_call_keyboardinterrupt_no_kill�s���,�,�Z�_�_�e�,�Lrc�F�|jtjd��yrx)rvrrr$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")rrEro)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��&)rv)r%rs  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)rZr�	getoutput�getstatusoutputr�r�rr�r�r(r7�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�F�hd�}ttj�}t�}ddl}tjj�D]@\}}|j
d�r�t||jf�r�0|j|��B|j|||z
�y)z*Ensure that __all__ is populated properly.>r�rYrl�HandlerrNr�)r�r�__all__r��__dict__�itemsr�r\�
ModuleTyper�rZ)r%�intentionally_excluded�exported�possible_exportsr�r�rls       r�test__all__zMiscTests.test__all__�s���!R���z�)�)�*���5���%�.�.�4�4�6�	'�K�D�%����s�#���%�%�"2�"2�!4�5��� � ��&�	'�	
����#3�6L�#L�MrN)r1r2r3rrErkrrtrurvryr{r�r�r�r4rrrfrfQs_��0��)�)�0�
�Z�Z���z�'�'��8�)H�9�)H�VM�L�H��&Nrrf�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�rJ)r%rSr�rss   �rr&zCommandsWithSpaces.setUp�sP���
��
���#�#�E�7�3���5��[�[�^��
�
����c�	
�	����rc�`��tj|j�t�|��yr")rr^r�rr/r	s �rr/zCommandsWithSpaces.tearDown�s���
�	�	�$�*�*��
���rc��tj|d<tj|i|��}|5|j|jj�j
d�d|jz�ddd�y#1swYyxYw)NrC�mbcsz2 [%r, 'ab cd'])rrFrErZrCr
rr�)r%r:r;rLs    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�rp�r�rXrYr�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�rpr�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)rrErXrYrFrZrCr
rDr�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)rrErXrYrZrrs  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�rSrs  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�)rcr�rrEr�rFrs  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)z9Broken pipe error should not prevent wait() (Issue 21619)rg)rBrOrhNr)rrErrFrr��	__enter__rBr�rrrcr��__exit__rZr�r�rs  r�test_broken_pipe_cleanupz,ContextManagerTests.test_broken_pipe_cleanups�������&0�o�o�(/�(=�(=�a�(?�A���~�~���	
�
�
����� 5� 5�5�6����$�/�/�*����'�4�=�=�$��d�C�������!�,�����
�
�)�)�*rN)r1r2r3r�r�r�r�r�r4rrr�r��s��,�/�1��+rr��__main__)Hrnrrgr�test.supportrrrr�test.support.script_helperr	rrXr�rHr\rr�r�r>r�r�r�r�r�rrCr�r�r�rq�test.support.os_helperr
rr8rYr�rl�PGOro�has_subprocess_supportr�r(r�r�r�NotADirectoryErrorrAr�rYrr�TestCaser �	Exceptionr6rEr8r?r�rr�rr�r&rfr�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