test/py: Allow passing input to a program
When running a program on the host, allow input to be passed in as stdin. This is needed for running sfdisk, for example. Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
c700f109a3
commit
15156c95e9
@ -109,7 +109,7 @@ class RunAndLog(object):
|
|||||||
"""Clean up any resources managed by this object."""
|
"""Clean up any resources managed by this object."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def run(self, cmd, cwd=None, ignore_errors=False):
|
def run(self, cmd, cwd=None, ignore_errors=False, stdin=None):
|
||||||
"""Run a command as a sub-process, and log the results.
|
"""Run a command as a sub-process, and log the results.
|
||||||
|
|
||||||
The output is available at self.output which can be useful if there is
|
The output is available at self.output which can be useful if there is
|
||||||
@ -123,6 +123,7 @@ class RunAndLog(object):
|
|||||||
function will simply return if the command cannot be executed
|
function will simply return if the command cannot be executed
|
||||||
or exits with an error code, otherwise an exception will be
|
or exits with an error code, otherwise an exception will be
|
||||||
raised if such problems occur.
|
raised if such problems occur.
|
||||||
|
stdin: Input string to pass to the command as stdin (or None)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The output as a string.
|
The output as a string.
|
||||||
@ -135,8 +136,9 @@ class RunAndLog(object):
|
|||||||
|
|
||||||
try:
|
try:
|
||||||
p = subprocess.Popen(cmd, cwd=cwd,
|
p = subprocess.Popen(cmd, cwd=cwd,
|
||||||
stdin=None, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
stdin=subprocess.PIPE if stdin else None,
|
||||||
(stdout, stderr) = p.communicate()
|
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
|
||||||
|
(stdout, stderr) = p.communicate(input=stdin)
|
||||||
if stdout is not None:
|
if stdout is not None:
|
||||||
stdout = stdout.decode('utf-8')
|
stdout = stdout.decode('utf-8')
|
||||||
if stderr is not None:
|
if stderr is not None:
|
||||||
|
@ -154,7 +154,7 @@ def wait_until_file_open_fails(fn, ignore_errors):
|
|||||||
return
|
return
|
||||||
raise Exception('File can still be opened')
|
raise Exception('File can still be opened')
|
||||||
|
|
||||||
def run_and_log(u_boot_console, cmd, ignore_errors=False):
|
def run_and_log(u_boot_console, cmd, ignore_errors=False, stdin=None):
|
||||||
"""Run a command and log its output.
|
"""Run a command and log its output.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
@ -166,6 +166,7 @@ def run_and_log(u_boot_console, cmd, ignore_errors=False):
|
|||||||
will simply return if the command cannot be executed or exits with
|
will simply return if the command cannot be executed or exits with
|
||||||
an error code, otherwise an exception will be raised if such
|
an error code, otherwise an exception will be raised if such
|
||||||
problems occur.
|
problems occur.
|
||||||
|
stdin: Input string to pass to the command as stdin (or None)
|
||||||
|
|
||||||
Returns:
|
Returns:
|
||||||
The output as a string.
|
The output as a string.
|
||||||
@ -173,7 +174,7 @@ def run_and_log(u_boot_console, cmd, ignore_errors=False):
|
|||||||
if isinstance(cmd, str):
|
if isinstance(cmd, str):
|
||||||
cmd = cmd.split()
|
cmd = cmd.split()
|
||||||
runner = u_boot_console.log.get_runner(cmd[0], sys.stdout)
|
runner = u_boot_console.log.get_runner(cmd[0], sys.stdout)
|
||||||
output = runner.run(cmd, ignore_errors=ignore_errors)
|
output = runner.run(cmd, ignore_errors=ignore_errors, stdin=stdin)
|
||||||
runner.close()
|
runner.close()
|
||||||
return output
|
return output
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user