You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							79 lines
						
					
					
						
							2.0 KiB
						
					
					
				
			
		
		
	
	
							79 lines
						
					
					
						
							2.0 KiB
						
					
					
				from abc import abstractmethod
 | 
						|
from signal import Signals
 | 
						|
from typing import Optional
 | 
						|
 | 
						|
from ._resources import AsyncResource
 | 
						|
from ._streams import ByteReceiveStream, ByteSendStream
 | 
						|
 | 
						|
 | 
						|
class Process(AsyncResource):
 | 
						|
    """An asynchronous version of :class:`subprocess.Popen`."""
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    async def wait(self) -> int:
 | 
						|
        """
 | 
						|
        Wait until the process exits.
 | 
						|
 | 
						|
        :return: the exit code of the process
 | 
						|
        """
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def terminate(self) -> None:
 | 
						|
        """
 | 
						|
        Terminates the process, gracefully if possible.
 | 
						|
 | 
						|
        On Windows, this calls ``TerminateProcess()``.
 | 
						|
        On POSIX systems, this sends ``SIGTERM`` to the process.
 | 
						|
 | 
						|
        .. seealso:: :meth:`subprocess.Popen.terminate`
 | 
						|
        """
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def kill(self) -> None:
 | 
						|
        """
 | 
						|
        Kills the process.
 | 
						|
 | 
						|
        On Windows, this calls ``TerminateProcess()``.
 | 
						|
        On POSIX systems, this sends ``SIGKILL`` to the process.
 | 
						|
 | 
						|
        .. seealso:: :meth:`subprocess.Popen.kill`
 | 
						|
        """
 | 
						|
 | 
						|
    @abstractmethod
 | 
						|
    def send_signal(self, signal: Signals) -> None:
 | 
						|
        """
 | 
						|
        Send a signal to the subprocess.
 | 
						|
 | 
						|
        .. seealso:: :meth:`subprocess.Popen.send_signal`
 | 
						|
 | 
						|
        :param signal: the signal number (e.g. :data:`signal.SIGHUP`)
 | 
						|
        """
 | 
						|
 | 
						|
    @property
 | 
						|
    @abstractmethod
 | 
						|
    def pid(self) -> int:
 | 
						|
        """The process ID of the process."""
 | 
						|
 | 
						|
    @property
 | 
						|
    @abstractmethod
 | 
						|
    def returncode(self) -> Optional[int]:
 | 
						|
        """
 | 
						|
        The return code of the process. If the process has not yet terminated, this will be
 | 
						|
        ``None``.
 | 
						|
        """
 | 
						|
 | 
						|
    @property
 | 
						|
    @abstractmethod
 | 
						|
    def stdin(self) -> Optional[ByteSendStream]:
 | 
						|
        """The stream for the standard input of the process."""
 | 
						|
 | 
						|
    @property
 | 
						|
    @abstractmethod
 | 
						|
    def stdout(self) -> Optional[ByteReceiveStream]:
 | 
						|
        """The stream for the standard output of the process."""
 | 
						|
 | 
						|
    @property
 | 
						|
    @abstractmethod
 | 
						|
    def stderr(self) -> Optional[ByteReceiveStream]:
 | 
						|
        """The stream for the standard error output of the process."""
 |