mirror of
				https://git.launchpad.net/ubuntu-dev-tools
				synced 2025-11-03 23:44:19 +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']
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def Popen(*args, **kwargs):
 | 
			
		||||
    kwargs.setdefault('close_fds', True)
 | 
			
		||||
class Popen(subprocess.Popen):
 | 
			
		||||
    def __init__(self, *args, **kwargs):
 | 
			
		||||
        kwargs.setdefault('close_fds', True)
 | 
			
		||||
 | 
			
		||||
    if 'restore_signals' not in inspect.getargspec(subprocess.Popen.__init__)[0]:
 | 
			
		||||
        given_preexec_fn = kwargs.pop('preexec_fn', None)
 | 
			
		||||
        restore_signals = kwargs.pop('restore_signals', True)
 | 
			
		||||
        def preexec_fn():
 | 
			
		||||
            if restore_signals:
 | 
			
		||||
                for sig in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
 | 
			
		||||
                    if hasattr(signal, sig):
 | 
			
		||||
                        signal.signal(getattr(signal, sig),
 | 
			
		||||
                                      signal.SIG_DFL)
 | 
			
		||||
        if 'restore_signals' not in inspect.getargspec(subprocess.Popen.__init__)[0]:
 | 
			
		||||
            given_preexec_fn = kwargs.pop('preexec_fn', None)
 | 
			
		||||
            restore_signals = kwargs.pop('restore_signals', True)
 | 
			
		||||
            def preexec_fn():
 | 
			
		||||
                if restore_signals:
 | 
			
		||||
                    for sig in ('SIGPIPE', 'SIGXFZ', 'SIGXFSZ'):
 | 
			
		||||
                        if hasattr(signal, sig):
 | 
			
		||||
                            signal.signal(getattr(signal, sig),
 | 
			
		||||
                                          signal.SIG_DFL)
 | 
			
		||||
 | 
			
		||||
            if given_preexec_fn:
 | 
			
		||||
                given_preexec_fn()
 | 
			
		||||
        kwargs['preexec_fn'] = preexec_fn
 | 
			
		||||
                if given_preexec_fn:
 | 
			
		||||
                    given_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
 | 
			
		||||
 | 
			
		||||
@ -28,8 +28,8 @@ WHITELIST = [re.compile(': %s$' % x) for x in (
 | 
			
		||||
    # mox:
 | 
			
		||||
    r"Instance of '.+' has no '(WithSideEffects|MultipleTimes|AndReturn)' "
 | 
			
		||||
    r"member",
 | 
			
		||||
    # Wrong Popen
 | 
			
		||||
    r"Function 'Popen' has no '__init__' member",
 | 
			
		||||
    # pylint doesn't like *args/**kwargs
 | 
			
		||||
    r"Instance of 'Popen' has no '.*' member",
 | 
			
		||||
)]
 | 
			
		||||
 | 
			
		||||
class PylintTestCase(unittest.TestCase):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user