mirror of
https://git.launchpad.net/ubuntu-dev-tools
synced 2025-05-15 02:41:28 +00:00
Reimplement ubuntutools.subprocess.Popen as a class instead of a factory function.
This commit is contained in:
parent
d82e65e0e2
commit
5c96b78d72
@ -21,24 +21,25 @@ from subprocess import PIPE, STDOUT, CalledProcessError
|
|||||||
__all__ = ['Popen', 'call', 'check_call', 'check_output', 'CalledProcessError', 'PIPE', 'STDOUT']
|
__all__ = ['Popen', 'call', 'check_call', 'check_output', 'CalledProcessError', 'PIPE', 'STDOUT']
|
||||||
|
|
||||||
|
|
||||||
def Popen(*args, **kwargs):
|
class Popen(subprocess.Popen):
|
||||||
kwargs.setdefault('close_fds', True)
|
def __init__(self, *args, **kwargs):
|
||||||
|
kwargs.setdefault('close_fds', True)
|
||||||
|
|
||||||
if 'restore_signals' not in inspect.getargspec(subprocess.Popen.__init__)[0]:
|
if 'restore_signals' not in inspect.getargspec(subprocess.Popen.__init__)[0]:
|
||||||
given_preexec_fn = kwargs.pop('preexec_fn', None)
|
given_preexec_fn = kwargs.pop('preexec_fn', None)
|
||||||
restore_signals = kwargs.pop('restore_signals', True)
|
restore_signals = kwargs.pop('restore_signals', True)
|
||||||
def preexec_fn():
|
def preexec_fn():
|
||||||
if restore_signals:
|
if restore_signals:
|
||||||
for sig in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
|
for sig in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
|
||||||
if hasattr(signal, sig):
|
if hasattr(signal, sig):
|
||||||
signal.signal(getattr(signal, sig),
|
signal.signal(getattr(signal, sig),
|
||||||
signal.SIG_DFL)
|
signal.SIG_DFL)
|
||||||
|
|
||||||
if given_preexec_fn:
|
if given_preexec_fn:
|
||||||
given_preexec_fn()
|
given_preexec_fn()
|
||||||
kwargs['preexec_fn'] = preexec_fn
|
kwargs['preexec_fn'] = preexec_fn
|
||||||
|
|
||||||
return subprocess.Popen(*args, **kwargs)
|
subprocess.Popen.__init__(self, *args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
# call, check_call, and check_output are copied directly from the
|
# call, check_call, and check_output are copied directly from the
|
||||||
|
@ -28,8 +28,8 @@ WHITELIST = [re.compile(': %s$' % x) for x in (
|
|||||||
# mox:
|
# mox:
|
||||||
r"Instance of '.+' has no '(WithSideEffects|MultipleTimes|AndReturn)' "
|
r"Instance of '.+' has no '(WithSideEffects|MultipleTimes|AndReturn)' "
|
||||||
r"member",
|
r"member",
|
||||||
# Wrong Popen
|
# pylint doesn't like *args/**kwargs
|
||||||
r"Function 'Popen' has no '__init__' member",
|
r"Instance of 'Popen' has no '.*' member",
|
||||||
)]
|
)]
|
||||||
|
|
||||||
class PylintTestCase(unittest.TestCase):
|
class PylintTestCase(unittest.TestCase):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user