From 02a7f1ff9f9e18e0c470b88a3a193d8f562c3937 Mon Sep 17 00:00:00 2001 From: Warren Usui Date: Mon, 15 Sep 2014 11:05:14 -0700 Subject: [PATCH] Fix daemon-helper argument parsing. Fixes: 8700 Signed-off-by: Warren Usui --- teuthology/task/daemon-helper | 45 ++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/teuthology/task/daemon-helper b/teuthology/task/daemon-helper index ca0bbb0c6f..dbb3258d60 100755 --- a/teuthology/task/daemon-helper +++ b/teuthology/task/daemon-helper @@ -13,7 +13,8 @@ When EOF is seen on stdin, the child process is killed. When the child process exits, this helper exits too. -usage: daemon-helper [--kill-group] [nostdin] command... +Usage: + daemon-helper [--kill-group] [nostdin] COMMAND ... """ import fcntl @@ -23,32 +24,44 @@ import signal import struct import subprocess import sys - +from argparse import ArgumentParser + +parser = ArgumentParser(epilog= + 'The remaining parameters are the command to be run. If these\n' + + 'parameters start wih nostdin, then no stdin input is expected.') +parser.add_argument('signal') +parser.add_argument('--kill-group', action='store_true', + help='kill all processes in the group') +parser.add_argument('--nostdin', action='store_true', + help='no stdin input expected') +parsed, args = parser.parse_known_args() end_signal = signal.SIGKILL -if sys.argv[1] == "term": +if parsed.signal == 'term': end_signal = signal.SIGTERM +group = parsed.kill_group +nostdin = parsed.nostdin +skip_nostdin = 0 +try: + if args[0] == 'nostdin': + nostdin = True + skip_nostdin = 1 +except IndexError: + print 'No command specified' + sys.exit(1) -cmd_start = 2 - -group = False -if sys.argv[cmd_start] == "--kill-group": - group = True - cmd_start += 1 - -nostdin = False -if sys.argv[cmd_start] == "nostdin": - nostdin = True - cmd_start += 1 proc = None if nostdin: + if len(args) - skip_nostdin == 0: + print 'No command specified' + sys.exit(1) proc = subprocess.Popen( - args=sys.argv[cmd_start:], + args=args[skip_nostdin:], ) else: with file('/dev/null', 'rb') as devnull: proc = subprocess.Popen( - args=sys.argv[cmd_start:], + args=args, stdin=devnull, preexec_fn=os.setsid, ) -- 2.39.5