12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- from __future__ import annotations
- from abc import abstractmethod
- from signal import Signals
- 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) -> int | None:
- """
- The return code of the process. If the process has not yet terminated, this will
- be ``None``.
- """
- @property
- @abstractmethod
- def stdin(self) -> ByteSendStream | None:
- """The stream for the standard input of the process."""
- @property
- @abstractmethod
- def stdout(self) -> ByteReceiveStream | None:
- """The stream for the standard output of the process."""
- @property
- @abstractmethod
- def stderr(self) -> ByteReceiveStream | None:
- """The stream for the standard error output of the process."""
|