diff options
author | Zhangyuan Nie <yuan@znie.org> | 2022-07-19 15:07:37 -0400 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2022-08-01 17:29:44 +0300 |
commit | fa71c38688e422a446b41c7f52d12c05e49716a8 (patch) | |
tree | 26da63081b4a862c79f8db973316dbeb7ec173a7 | |
parent | 73985f98dc170713ed86324937fda6cd22f8c701 (diff) | |
download | meson-fa71c38688e422a446b41c7f52d12c05e49716a8.zip meson-fa71c38688e422a446b41c7f52d12c05e49716a8.tar.gz meson-fa71c38688e422a446b41c7f52d12c05e49716a8.tar.bz2 |
fix Popen_safe write
-rw-r--r-- | mesonbuild/mesonlib/universal.py | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/mesonbuild/mesonlib/universal.py b/mesonbuild/mesonlib/universal.py index ebcd9f4..c501a30 100644 --- a/mesonbuild/mesonlib/universal.py +++ b/mesonbuild/mesonlib/universal.py @@ -1394,20 +1394,22 @@ def partition(pred: T.Callable[[_T], object], iterable: T.Iterable[_T]) -> T.Tup def Popen_safe(args: T.List[str], write: T.Optional[str] = None, + stdin: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.DEVNULL, stdout: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.PIPE, stderr: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.PIPE, **kwargs: T.Any) -> T.Tuple['subprocess.Popen[str]', str, str]: import locale encoding = locale.getpreferredencoding() - # Redirect stdin to DEVNULL otherwise the command run by us here might mess + # Stdin defaults to DEVNULL otherwise the command run by us here might mess # up the console and ANSI colors will stop working on Windows. - if 'stdin' not in kwargs: - kwargs['stdin'] = subprocess.DEVNULL + # If write is not None, set stdin to PIPE so data can be sent. + if write is not None: + stdin = subprocess.PIPE if not sys.stdout.encoding or encoding.upper() != 'UTF-8': - p, o, e = Popen_safe_legacy(args, write=write, stdout=stdout, stderr=stderr, **kwargs) + p, o, e = Popen_safe_legacy(args, write=write, stdin=stdin, stdout=stdout, stderr=stderr, **kwargs) else: p = subprocess.Popen(args, universal_newlines=True, close_fds=False, - stdout=stdout, stderr=stderr, **kwargs) + stdin=stdin, stdout=stdout, stderr=stderr, **kwargs) o, e = p.communicate(write) # Sometimes the command that we run will call another command which will be # without the above stdin workaround, so set the console mode again just in @@ -1417,11 +1419,12 @@ def Popen_safe(args: T.List[str], write: T.Optional[str] = None, def Popen_safe_legacy(args: T.List[str], write: T.Optional[str] = None, + stdin: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.DEVNULL, stdout: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.PIPE, stderr: T.Union[T.TextIO, T.BinaryIO, int] = subprocess.PIPE, **kwargs: T.Any) -> T.Tuple['subprocess.Popen[str]', str, str]: p = subprocess.Popen(args, universal_newlines=False, close_fds=False, - stdout=stdout, stderr=stderr, **kwargs) + stdin=stdin, stdout=stdout, stderr=stderr, **kwargs) input_ = None # type: T.Optional[bytes] if write is not None: input_ = write.encode('utf-8') |