You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@slider.apache.org by st...@apache.org on 2014/06/30 17:37:38 UTC

[49/50] [abbrv] git commit: SLIDER-153 refactor .py script slightly for use elsewhere

SLIDER-153 refactor .py script slightly for use elsewhere


Project: http://git-wip-us.apache.org/repos/asf/incubator-slider/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-slider/commit/0ad4fb4f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-slider/tree/0ad4fb4f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-slider/diff/0ad4fb4f

Branch: refs/heads/feature/SLIDER-151_Implement_full_slider_API_in_REST_and_switch_client_to_it
Commit: 0ad4fb4f7b5cc4e590cbb9e51aa7cefb59a0ae2d
Parents: a048c9f
Author: Steve Loughran <st...@apache.org>
Authored: Mon Jun 30 16:16:08 2014 +0100
Committer: Steve Loughran <st...@apache.org>
Committed: Mon Jun 30 16:16:08 2014 +0100

----------------------------------------------------------------------
 slider-assembly/src/main/scripts/slider.py | 107 ++++++++++++++----------
 1 file changed, 64 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-slider/blob/0ad4fb4f/slider-assembly/src/main/scripts/slider.py
----------------------------------------------------------------------
diff --git a/slider-assembly/src/main/scripts/slider.py b/slider-assembly/src/main/scripts/slider.py
index d48eca6..e60bed3 100644
--- a/slider-assembly/src/main/scripts/slider.py
+++ b/slider-assembly/src/main/scripts/slider.py
@@ -60,10 +60,10 @@ def confDir(sliderdir):
   localconf = os.path.join(sliderdir, CONF)
   return os.environ.get(SLIDER_CONF_DIR,localconf) 
 
-def dirMustExist(dir):
-  if not os.path.exists(dir):
-    raise Exception("Directory does not exist: %s " % dir)
-  return dir
+def dirMustExist(dirname):
+  if not os.path.exists(dirname):
+    raise Exception("Directory does not exist: %s " % dirname)
+  return dirname
 
 def read(pipe, line):
   """
@@ -83,7 +83,61 @@ def read(pipe, line):
       return line, True
   else:
     return line, False
-    
+
+
+def runProcess(commandline):
+  """
+  Run a process
+  :param commandline: command line 
+  :return:the return code
+  """
+  print "ready to exec : %s" % commandline
+  exe = subprocess.Popen(commandline,
+                         stdin=None,
+                         stdout=subprocess.PIPE,
+                         stderr=subprocess.PIPE,
+                         shell=False)
+  stdout = exe.stdout
+  stderr = exe.stderr
+  outline = ""
+  errline = ""
+  while exe.poll() is None:
+    # process is running; grab output and echo every line
+    outline, done = read(stdout, outline)
+    if done:
+      print outline
+      outline = ""
+    errline, done = read(stderr, errline)
+    if done:
+      print errline
+      errline = ""
+
+  # get tail
+  out, err = exe.communicate()
+  print outline + out.decode()
+  print errline + err.decode()
+  return exe.returncode
+
+
+def java(classname, args, classpath, jvm_opts_list):
+  """
+  Execute a java process, hooking up stdout and stderr
+  and printing them a line at a time as they come in
+  :param classname: classname
+  :param args:  arguments to the java program
+  :param classpath: classpath
+  :param jvm_opts_list: list of JVM options
+  :return: the exit code.
+  """
+  # split the JVM opts by space
+  # java = "/usr/bin/java"
+  commandline = ["java"]
+  commandline.extend(jvm_opts_list)
+  commandline.append("-classpath")
+  commandline.append(classpath)
+  commandline.append(classname)
+  commandline.extend(args)
+  return runProcess(commandline)
 
 
 def usage():
@@ -98,14 +152,13 @@ def main():
   """
   if len(sys.argv)==1 :
     return usage()
-  print "stdout encoding: "+ sys.stdout.encoding
+  # print "stdout encoding: "+ sys.stdout.encoding
   args = sys.argv[1:]
   slider_home = sliderDir()
   libdir = dirMustExist(libDir(slider_home))
   confdir = dirMustExist(confDir(slider_home))
   default_jvm_opts = DEFAULT_JVM__OPTS % confdir
   slider_jvm_opts = os.environ.get(SLIDER_JVM_OPTS, default_jvm_opts)
-  # split the JVM opts by space
   jvm_opts_split = slider_jvm_opts.split()
   slider_classpath_extra = os.environ.get(SLIDER_CLASSPATH_EXTRA, "")
   p = os.pathsep    # path separator
@@ -119,42 +172,10 @@ def main():
   print "slider_jvm_opts = \"%s\"" % slider_jvm_opts
   print "slider_classpath = \"%s\"" % slider_classpath
 
-  #java = "/usr/bin/java"
-  commandline = ["java", ]
-  commandline.append("-classpath")
-  commandline.append(slider_classpath)
-  commandline.extend(jvm_opts_split)
-  commandline.append(SLIDER_CLASSNAME)
-  commandline.extend(args)
-  print "ready to exec : %s" % commandline
-  # docs warn of using PIPE on stderr 
-  exe = subprocess.Popen(commandline,
-                         stdin=None,
-                         stdout=subprocess.PIPE,
-                         stderr=subprocess.PIPE,
-                         shell=False)
-  stdout = exe.stdout
-  stderr = exe.stderr
-  outline = ""
-  errline = ""
-  while exe.poll() is None:
-    # process is running; grab output and echo every line
-    outline, done = read(stdout, outline)
-    if done:
-      print outline
-      outline = ""
-    errline, done = read(stderr, errline)
-    if done:
-      print errline
-      errline = ""
-
-  # get tail
-  out, err = exe.communicate()
-  print outline + out.decode()
-  print errline + err.decode()
-  return exe.returncode
-
-
+  return java(SLIDER_CLASSNAME,
+              args,
+              slider_classpath,
+              jvm_opts_split)
 
 if __name__ == '__main__':
   """