[elbe-devel] [PATCH v2 08/27] shellhelper: allow stdin options to be string

Torben Hohn torben.hohn at linutronix.de
Thu Sep 24 16:56:05 CEST 2020


subprocess.communicate() requires stdin to be bytes.

Allow for str, by conditionally calling encode().

Also add doctests for the str case.

Signed-off-by: Torben Hohn <torben.hohn at linutronix.de>
---
 elbepack/shellhelper.py | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/elbepack/shellhelper.py b/elbepack/shellhelper.py
index 21f234db7..83245886b 100644
--- a/elbepack/shellhelper.py
+++ b/elbepack/shellhelper.py
@@ -76,6 +76,9 @@ def command_out(cmd, stdin=None, output=PIPE, env_add=None):
     >>> command_out("2>&1 cat -", stdin=b"ELBE")
     (0, 'ELBE')
 
+    >>> command_out("2>&1 cat -", stdin="ELBE")
+    (0, 'ELBE')
+
     >>> command_out("false")
     (1, '')
 
@@ -84,6 +87,9 @@ def command_out(cmd, stdin=None, output=PIPE, env_add=None):
     if env_add:
         new_env.update(env_add)
 
+    if type(stdin) == str:
+        stdin = stdin.encode()
+
     if stdin is None:
         p = Popen(cmd, shell=True,
                   stdout=output, stderr=STDOUT, env=new_env)
@@ -137,6 +143,9 @@ def command_out_stderr(cmd, stdin=None, env_add=None):
     >>> command_out_stderr("1>&2 cat - && false", stdin=b"ELBE")
     (1, '', 'ELBE')
 
+    >>> command_out_stderr("1>&2 cat - && false", stdin="ELBE")
+    (1, '', 'ELBE')
+
     >>> command_out_stderr("true")
     (0, '', '')
 
@@ -145,6 +154,9 @@ def command_out_stderr(cmd, stdin=None, env_add=None):
     if env_add:
         new_env.update(env_add)
 
+    if type(stdin) == str:
+        stdin = stdin.encode()
+
     if stdin is None:
         p = Popen(cmd, shell=True,
                   stdout=PIPE, stderr=PIPE, env=new_env)
@@ -178,6 +190,9 @@ def system_out_stderr(cmd, stdin=None, allow_fail=False, env_add=None):
 
     >>> system_out_stderr("1>&2 cat -", allow_fail=True, stdin=b"ELBE")
     ('', 'ELBE')
+
+    >>> system_out_stderr("1>&2 cat -", allow_fail=True, stdin="ELBE")
+    ('', 'ELBE')
     """
     code, out, err = command_out_stderr(cmd, stdin, env_add)
 
@@ -224,6 +239,9 @@ def do(cmd, allow_fail=False, stdin=None, env_add=None):
     if env_add:
         new_env.update(env_add)
 
+    if type(stdin) == str:
+        stdin = stdin.encode()
+
     logging.info(cmd, extra={"context":"[CMD] "})
 
     r, w = os.pipe()
@@ -297,6 +315,9 @@ def get_command_out(cmd, stdin=None, allow_fail=False, env_add=None):
     if env_add:
         new_env.update(env_add)
 
+    if type(stdin) == str:
+        stdin = stdin.encode()
+
     logging.info(cmd, extra={"context":"[CMD] "})
 
     r, w = os.pipe()
-- 
2.20.1



More information about the elbe-devel mailing list