summaryrefslogtreecommitdiff
path: root/src/python
diff options
context:
space:
mode:
authorSteve Reinhardt <stever@gmail.com>2008-08-04 00:40:31 -0400
committerSteve Reinhardt <stever@gmail.com>2008-08-04 00:40:31 -0400
commitfe8aeff362844838c60ff31e444573fb7e9a7793 (patch)
tree8796c12b47ecc9609de9215a92d1bce306a6cf0d /src/python
parent50ef39af82413ef463609f24173b22af13fad268 (diff)
downloadgem5-fe8aeff362844838c60ff31e444573fb7e9a7793.tar.xz
Add -r/-e options to redirect stdout/stderr.
Better than using shell since it automatically uses -d directory for output files (creating it as needed).
Diffstat (limited to 'src/python')
-rw-r--r--src/python/m5/main.py35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/python/m5/main.py b/src/python/m5/main.py
index 2bbd72152..c9b1940dc 100644
--- a/src/python/m5/main.py
+++ b/src/python/m5/main.py
@@ -82,6 +82,14 @@ add_option('-N', "--release-notes", action="store_true", default=False,
# Options for configuring the base simulator
add_option('-d', "--outdir", metavar="DIR", default=".",
help="Set the output directory to DIR [Default: %default]")
+add_option('-r', "--redirect-stdout", action="store_true", default=False,
+ help="Redirect stdout (& stderr, without -e) to file")
+add_option('-e', "--redirect-stderr", action="store_true", default=False,
+ help="Redirect stderr to file")
+add_option("--stdout-file", metavar="FILE", default="simout",
+ help="Filename for -r redirection [Default: %default]")
+add_option("--stderr-file", metavar="FILE", default="simerr",
+ help="Filename for -e redirection [Default: %default]")
add_option('-i', "--interactive", action="store_true", default=False,
help="Invoke the interactive interpreter after running the script")
add_option("--pdb", action="store_true", default=False,
@@ -138,6 +146,33 @@ def main():
arguments = options.parse_args()
+ if not os.path.isdir(options.outdir):
+ os.makedirs(options.outdir)
+
+ # These filenames are used only if the redirect_std* options are set
+ stdout_file = os.path.join(options.outdir, options.stdout_file)
+ stderr_file = os.path.join(options.outdir, options.stderr_file)
+
+ # Print redirection notices here before doing any redirection
+ if options.redirect_stdout and not options.redirect_stderr:
+ print "Redirecting stdout and stderr to", stdout_file
+ else:
+ if options.redirect_stdout:
+ print "Redirecting stdout to", stdout_file
+ if options.redirect_stderr:
+ print "Redirecting stderr to", stderr_file
+
+ # Now redirect stdout/stderr as desired
+ if options.redirect_stdout:
+ redir_fd = os.open(stdout_file, os. O_WRONLY | os.O_CREAT | os.O_TRUNC)
+ os.dup2(redir_fd, sys.stdout.fileno())
+ if not options.redirect_stderr:
+ os.dup2(redir_fd, sys.stderr.fileno())
+
+ if options.redirect_stderr:
+ redir_fd = os.open(stderr_file, os. O_WRONLY | os.O_CREAT | os.O_TRUNC)
+ os.dup2(redir_fd, sys.stderr.fileno())
+
done = False
if options.build_info: