changeset e5fbd38bc828 in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=e5fbd38bc828
description:
        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:

2 files changed, 4 insertions(+), 3 deletions(-)
src/base/output.cc    |    3 ---
src/python/m5/main.py |    4 ++++

diffs (68 lines):

diff -r 6279e78a2df2 -r e5fbd38bc828 src/base/output.cc
--- a/src/base/output.cc        Sun Aug 03 18:19:55 2008 -0700
+++ b/src/base/output.cc        Mon Aug 04 00:40:31 2008 -0400
@@ -59,12 +59,6 @@
         panic("Output directory already set!\n");
 
     dir = d;
-
-    if (dir != ".") {
-        if (mkdir(dir.c_str(), 0777) < 0 && errno != EEXIST)
-            panic("couldn't make output dir %s: %s\n",
-                  dir, strerror(errno));
-    }
 
     // guarantee that directory ends with a '/'
     if (dir[dir.size() - 1] != '/')
diff -r 6279e78a2df2 -r e5fbd38bc828 src/python/m5/main.py
--- a/src/python/m5/main.py     Sun Aug 03 18:19:55 2008 -0700
+++ b/src/python/m5/main.py     Mon Aug 04 00:40:31 2008 -0400
@@ -82,6 +82,14 @@
 # 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,
@@ -137,6 +145,33 @@
         execfile(options_file, scope)
 
     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
 
_______________________________________________
m5-dev mailing list
m5-dev@m5sim.org
http://m5sim.org/mailman/listinfo/m5-dev

Reply via email to