Merge "Restore SIGPIPE default action for subprocesses" into stable/folsom
This commit is contained in:
commit
4946d4bb28
@ -38,6 +38,7 @@
|
||||
|
||||
import ConfigParser
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
@ -47,6 +48,12 @@ RC_NOCOMMAND = 98
|
||||
RC_BADCONFIG = 97
|
||||
|
||||
|
||||
def _subprocess_setup():
|
||||
# Python installs a SIGPIPE handler by default. This is usually not what
|
||||
# non-Python subprocesses expect.
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# Split arguments, require at least a command
|
||||
execname = sys.argv.pop(0)
|
||||
@ -84,6 +91,7 @@ if __name__ == '__main__':
|
||||
stdin=sys.stdin,
|
||||
stdout=sys.stdout,
|
||||
stderr=sys.stderr,
|
||||
preexec_fn=_subprocess_setup,
|
||||
env=filtermatch.get_environment(userargs))
|
||||
obj.wait()
|
||||
sys.exit(obj.returncode)
|
||||
|
@ -21,6 +21,7 @@ import fcntl
|
||||
import logging
|
||||
import os
|
||||
import shlex
|
||||
import signal
|
||||
import socket
|
||||
import struct
|
||||
|
||||
@ -30,6 +31,12 @@ from eventlet.green import subprocess
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _subprocess_setup():
|
||||
# Python installs a SIGPIPE handler by default. This is usually not what
|
||||
# non-Python subprocesses expect.
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
|
||||
|
||||
def execute(cmd, root_helper=None, process_input=None, addl_env=None,
|
||||
check_exit_code=True, return_stderr=False):
|
||||
if root_helper:
|
||||
@ -42,6 +49,7 @@ def execute(cmd, root_helper=None, process_input=None, addl_env=None,
|
||||
env.update(addl_env)
|
||||
obj = subprocess.Popen(cmd, shell=False, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
preexec_fn=_subprocess_setup,
|
||||
env=env)
|
||||
|
||||
_stdout, _stderr = (process_input and
|
||||
|
@ -23,6 +23,7 @@
|
||||
|
||||
import logging
|
||||
import os
|
||||
import signal
|
||||
import subprocess
|
||||
import uuid
|
||||
|
||||
@ -47,6 +48,12 @@ def boolize(subject):
|
||||
return subject
|
||||
|
||||
|
||||
def _subprocess_setup():
|
||||
# Python installs a SIGPIPE handler by default. This is usually not what
|
||||
# non-Python subprocesses expect.
|
||||
signal.signal(signal.SIGPIPE, signal.SIG_DFL)
|
||||
|
||||
|
||||
def execute(cmd, process_input=None, addl_env=None, check_exit_code=True):
|
||||
logging.debug("Running cmd: %s", cmd)
|
||||
env = os.environ.copy()
|
||||
@ -54,6 +61,7 @@ def execute(cmd, process_input=None, addl_env=None, check_exit_code=True):
|
||||
env.update(addl_env)
|
||||
obj = subprocess.Popen(cmd, shell=True, stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
preexec_fn=_subprocess_setup,
|
||||
env=env)
|
||||
result = None
|
||||
if process_input is not None:
|
||||
|
Loading…
Reference in New Issue
Block a user