summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLars Wirzenius <liw@liw.fi>2017-08-19 21:23:43 +0300
committerLars Wirzenius <liw@liw.fi>2017-08-19 21:23:43 +0300
commit4ef3cc9e5af5cd51023771fbb54f08412e9e6f90 (patch)
tree51420909f20b2f0253f9a1dd1203046730a24763
parent9f0b3904c9170a6e9ffec152bb55b47e8eac062b (diff)
downloadcliapp-4ef3cc9e5af5cd51023771fbb54f08412e9e6f90.tar.gz
Add: Python3 support
-rw-r--r--cliapp/runcmd.py20
-rw-r--r--pylint.conf1
2 files changed, 15 insertions, 6 deletions
diff --git a/cliapp/runcmd.py b/cliapp/runcmd.py
index de6ecc2..a14fa72 100644
--- a/cliapp/runcmd.py
+++ b/cliapp/runcmd.py
@@ -108,7 +108,7 @@ def runcmd_unchecked(argv, *argvs, **kwargs):
pipe_stdout, pipe_stderr,
stdout_callback, stderr_callback,
output_timeout, timeout_callback)
- except OSError, e: # pragma: no cover
+ except OSError as e: # pragma: no cover
if e.errno == errno.ENOENT and e.filename is None:
e.filename = argv[0]
raise e
@@ -158,7 +158,7 @@ def _build_pipeline(argvs, pipe_stdin, pipe_stdout, pipe_stderr, kwargs):
os.close(wpipe)
# Allow reading of the stderr of every process as the stderr of
# the last element
- procs[-1].stderr = os.fdopen(rpipe)
+ procs[-1].stderr = os.fdopen(rpipe, 'rb')
return procs
@@ -264,6 +264,14 @@ def _run_pipeline(procs, feed_stdin, pipe_stdin, pipe_stdout, pipe_stderr,
timeout_callback()
errorcodes = [p.returncode for p in procs if p.returncode != 0] or [0]
+
+ # Ensure that the pipeline doesn't leak file descriptors
+ if procs[0].stdin is not None:
+ procs[0].stdin.close()
+ if procs[-1].stderr is not None:
+ procs[-1].stderr.close()
+ if procs[-1].stdout is not None:
+ procs[-1].stdout.close()
return errorcodes[-1], ''.join(out), ''.join(err)
@@ -339,17 +347,17 @@ def ssh_runcmd(target, argv, **kwargs): # pragma: no cover
ssh_argv.append('-T')
more_options = kwargs.pop('ssh_options', [])
- ssh_argv.extend(map(shell_quote, more_options))
+ ssh_argv.extend(list(map(shell_quote, more_options)))
ssh_argv.append(target)
ssh_argv.append('--')
remote_cwd = kwargs.pop('remote_cwd', None)
if remote_cwd:
- ssh_argv.extend(map(shell_quote, [
+ ssh_argv.extend(list(map(shell_quote, [
'sh', '-c', 'cd "$1" && shift && exec "$@"',
'-',
- remote_cwd]))
+ remote_cwd])))
- local_argv = ssh_argv + map(shell_quote, argv)
+ local_argv = ssh_argv + list(map(shell_quote, argv))
return runcmd(local_argv, **kwargs)
diff --git a/pylint.conf b/pylint.conf
index cd6769c..10646fa 100644
--- a/pylint.conf
+++ b/pylint.conf
@@ -14,6 +14,7 @@ disable=
protected-access,
redefined-variable-type,
star-args,
+ superfluous-parens,
too-few-public-methods,
too-many-arguments,
too-many-branches,