blob: cef632827e2660e475081dc392175eaed57420c0 [file] [log] [blame]
#!/usr/bin/env python
r"""
This module provides command execution functions such as cmd_fnc and cmd_fnc_u.
"""
import sys
import subprocess
robot_env = 1
try:
from robot.libraries.BuiltIn import BuiltIn
except ImportError:
robot_env = 0
import gen_print as gp
import gen_valid as gv
import gen_misc as gm
if robot_env:
import gen_robot_print as grp
###############################################################################
def cmd_fnc(cmd_buf,
quiet=None,
test_mode=None,
debug=0,
print_output=1,
show_err=1):
r"""
Run the given command in a shell and return the shell return code.
Description of arguments:
cmd_buf The command string to be run in a shell.
quiet Indicates whether this function should run
the pissuing()
function prints an "Issuing: <cmd string>" to stdout.
test_mode If test_mode is set, this function will
not actually run
the command.
debug If debug is set, this function will print
extra debug info.
print_output If this is set, this function will print
the stdout/stderr
generated by the shell command.
show_err If show_err is set, this function will
print a standardized
error report if the shell command returns non-zero.
"""
quiet = int(gm.global_default(quiet, 0))
test_mode = int(gm.global_default(test_mode, 0))
if debug:
gp.print_vars(cmd_buf, quiet, test_mode, debug)
err_msg = gv.svalid_value(cmd_buf)
if err_msg != "":
raise ValueError(err_msg)
if not quiet:
gp.pissuing(cmd_buf, test_mode)
if test_mode:
return 0, ""
sub_proc = subprocess.Popen(cmd_buf,
bufsize=1,
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
out_buf = ""
for line in sub_proc.stdout:
out_buf += line
if not print_output:
continue
if robot_env:
grp.rprint(line)
else:
sys.stdout.write(line)
if print_output and not robot_env:
sys.stdout.flush()
sub_proc.communicate()
shell_rc = sub_proc.returncode
if shell_rc != 0 and show_err:
if robot_env:
grp.rprint_error_report("The prior command failed.\n" +
gp.sprint_var(shell_rc, 1))
else:
gp.print_error_report("The prior command failed.\n" +
gp.sprint_var(shell_rc, 1))
return shell_rc, out_buf
###############################################################################
###############################################################################
def cmd_fnc_u(cmd_buf,
quiet=None,
debug=None,
print_output=1,
show_err=1):
r"""
Call cmd_fnc with test_mode=0. See cmd_fnc (above) for details.
Note the "u" in "cmd_fnc_u" stands for "unconditional".
"""
return cmd_fnc(cmd_buf, test_mode=0, quiet=quiet, debug=debug,
print_output=print_output, show_err=show_err)
###############################################################################