
    ITh                     ^   S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJ	r	  SSK
JrJrJrJrJrJr  SSKJr  \" \5      r\S	\\SS4   4S
 j5       r  SS\\\\   4   S\\\\	4      S	\R.                  4S jjr\ SS\\\\   4   S\\\\	4      S	\\\\   \\   4   SS4   4S jj5       rg)zFContains utilities to easily handle subprocesses in `huggingface_hub`.    N)contextmanager)StringIO)Path)IO	GeneratorListOptionalTupleUnion   )
get_loggerreturnc               #      #    [        5       n [        R                  nU [        l         U v   U[        l        g! U[        l        f = f7f)a  Capture output that is printed to terminal.

    Taken from https://stackoverflow.com/a/34738440

    Example:
    ```py
    >>> with capture_output() as output:
    ...     print("hello world")
    >>> assert output.getvalue() == "hello world
"
    ```
    N)r   sysstdout)outputprevious_outputs     Y/var/www/auris/envauris/lib/python3.13/site-packages/huggingface_hub/utils/_subprocess.pycapture_outputr      s6      ZFjjOCJ%$
_
s   &A	9 A	AA	commandfolderc           
      8   [        U [        5      (       a  U R                  5       n [        U[        5      (       a  [        U5      n[        R
                  " U 4[        R                  [        R                  USSU=(       d    [        R                  " 5       S.UD6$ )a  
Method to run subprocesses. Calling this will capture the `stderr` and `stdout`,
please call `subprocess.run` manually in case you would like for them not to
be captured.

Args:
    command (`str` or `List[str]`):
        The command to execute as a string or list of strings.
    folder (`str`, *optional*):
        The folder in which to run the command. Defaults to current working
        directory (from `os.getcwd()`).
    check (`bool`, *optional*, defaults to `True`):
        Setting `check` to `True` will raise a `subprocess.CalledProcessError`
        when the subprocess has a non-zero exit code.
    kwargs (`Dict[str]`):
        Keyword arguments to be passed to the `subprocess.run` underlying command.

Returns:
    `subprocess.CompletedProcess`: The completed process.
utf-8replace)stderrr   checkencodingerrorscwd)	
isinstancestrsplitr   
subprocessrunPIPEosgetcwd)r   r   r   kwargss       r   run_subprocessr)   5   sz    4 '3--/&$V>>	!biik	 	 	    c           
   +     #    [        U [        5      (       a  U R                  5       n [        R                  " U 4[        R
                  [        R
                  [        R                  SSU=(       d    [        R                  " 5       S.UD6 nUR                  c   S5       eUR                  c   S5       eUR                  UR                  4v   SSS5        g! , (       d  f       g= f7f)a  Run a subprocess in an interactive mode in a context manager.

    Args:
        command (`str` or `List[str]`):
            The command to execute as a string or list of strings.
        folder (`str`, *optional*):
            The folder in which to run the command. Defaults to current working
            directory (from `os.getcwd()`).
        kwargs (`Dict[str]`):
            Keyword arguments to be passed to the `subprocess.run` underlying command.

    Returns:
        `Tuple[IO[str], IO[str]]`: A tuple with `stdin` and `stdout` to interact
        with the process (input and output are utf-8 encoded).

    Example:
    ```python
    with _interactive_subprocess("git credential-store get") as (stdin, stdout):
        # Write to stdin
        stdin.write("url=hf.co
username=obama
".encode("utf-8"))
        stdin.flush()

        # Read from stdout
        output = stdout.read().decode("utf-8")
    ```
    r   r   )stdinr   r   r   r   r   Nz'subprocess is opened as subprocess.PIPE)r    r!   r"   r#   Popenr%   STDOUTr&   r'   r,   r   )r   r   r(   processs       r   run_interactive_subprocessr0   a   s     @ '3--/				
oo  !biik	
 	
 
}}(S*SS(~~)T+TT)mmW^^++	
 	
 	
s   B
C)AC	C)
C&"C))NT)N)__doc__r&   r#   r   
contextlibr   ior   pathlibr   typingr   r   r   r	   r
   r   loggingr   __name__loggerr   r!   CompletedProcessr)   r0    r*   r   <module>r;      s   M 	  
 %   > >  
H	 %	(D$"67 % %. *.
)3S	>")U39%&)
   )X  *..,3S	>".,U39%&., uRWbg%&d23	., .,r*   