mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-05-17 20:01:30 +00:00
Add encoding support to our Popen wrapper
This commit is contained in:
parent
9ef7545150
commit
43ad610a66
@ -50,7 +50,7 @@ def system_distribution_chain():
|
|||||||
if len(_system_distribution_chain) == 0:
|
if len(_system_distribution_chain) == 0:
|
||||||
try:
|
try:
|
||||||
p = Popen(('dpkg-vendor', '--query', 'Vendor'),
|
p = Popen(('dpkg-vendor', '--query', 'Vendor'),
|
||||||
stdout=PIPE)
|
stdout=PIPE, encoding='utf-8')
|
||||||
_system_distribution_chain.append(p.communicate()[0].strip())
|
_system_distribution_chain.append(p.communicate()[0].strip())
|
||||||
except OSError:
|
except OSError:
|
||||||
print('Error: Could not determine what distribution you are running.')
|
print('Error: Could not determine what distribution you are running.')
|
||||||
@ -61,7 +61,7 @@ def system_distribution_chain():
|
|||||||
p = Popen(('dpkg-vendor',
|
p = Popen(('dpkg-vendor',
|
||||||
'--vendor', _system_distribution_chain[-1],
|
'--vendor', _system_distribution_chain[-1],
|
||||||
'--query', 'Parent'),
|
'--query', 'Parent'),
|
||||||
stdout=PIPE)
|
stdout=PIPE, encoding='utf-8')
|
||||||
parent = p.communicate()[0].strip()
|
parent = p.communicate()[0].strip()
|
||||||
# Don't check return code, because if a vendor has no
|
# Don't check return code, because if a vendor has no
|
||||||
# parent, dpkg-vendor returns 1
|
# parent, dpkg-vendor returns 1
|
||||||
|
@ -6,6 +6,8 @@ module whose defaults better line up with our tastes.
|
|||||||
In particular, it:
|
In particular, it:
|
||||||
- Adds support for the restore_signals flag if subprocess itself
|
- Adds support for the restore_signals flag if subprocess itself
|
||||||
doesn't support it
|
doesn't support it
|
||||||
|
- Adds support for the encoding flag if subprocess itself doesn't
|
||||||
|
support it
|
||||||
- Defaults close_fds to True
|
- Defaults close_fds to True
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -13,6 +15,7 @@ In particular, it:
|
|||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
|
import codecs
|
||||||
import signal
|
import signal
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
@ -28,8 +31,10 @@ class Popen(subprocess.Popen):
|
|||||||
kwargs.setdefault('close_fds', True)
|
kwargs.setdefault('close_fds', True)
|
||||||
if sys.version_info[0] >= 3:
|
if sys.version_info[0] >= 3:
|
||||||
getargs = inspect.getfullargspec
|
getargs = inspect.getfullargspec
|
||||||
|
encoding = None
|
||||||
else:
|
else:
|
||||||
getargs = inspect.getargspec
|
getargs = inspect.getargspec
|
||||||
|
encoding = kwargs.pop('encoding', None)
|
||||||
|
|
||||||
if 'restore_signals' not in getargs(subprocess.Popen.__init__)[0]:
|
if 'restore_signals' not in getargs(subprocess.Popen.__init__)[0]:
|
||||||
given_preexec_fn = kwargs.pop('preexec_fn', None)
|
given_preexec_fn = kwargs.pop('preexec_fn', None)
|
||||||
@ -47,6 +52,11 @@ class Popen(subprocess.Popen):
|
|||||||
kwargs['preexec_fn'] = preexec_fn
|
kwargs['preexec_fn'] = preexec_fn
|
||||||
|
|
||||||
subprocess.Popen.__init__(self, *args, **kwargs)
|
subprocess.Popen.__init__(self, *args, **kwargs)
|
||||||
|
if encoding is not None:
|
||||||
|
for channel in ('stdin', 'stdout', 'stderr'):
|
||||||
|
fd = getattr(self, channel)
|
||||||
|
if fd is not None:
|
||||||
|
setattr(self, channel, codecs.EncodedFile(fd, encoding))
|
||||||
|
|
||||||
|
|
||||||
# call, check_call, and check_output are copied directly from the
|
# call, check_call, and check_output are copied directly from the
|
||||||
|
Loading…
x
Reference in New Issue
Block a user