May-06-2019, 08:24 PM
(This post was last modified: May-06-2019, 08:24 PM by kennethdean2010.)
(May-05-2019, 07:26 AM)SheeppOSU Wrote:(May-05-2019, 05:49 AM)kennethdean2010 Wrote: it just keeps loopingThat's because there is no break. You need to break it eventually. Here's an example of how it is uses -import random loopTimes = random.randint(1, 10) while True: for x in range(1, loopTimes + 1): if x == loopTimes + 1: break #Breaks out of the while loopCould implement break after something reaches a specific value
Ok so how would place the counter into the code:
def display_prompt(): """Displays prompt to allow user to schedule update installation Args: None Returns: (int) defer_seconds: Number of seconds user wishes to defer policy OR None if an error occurs """ #counter to loop through display_prompt X amount of times. cmd = [JAMFHELPER, '-windowType', 'hud', '-title', GUI_WINDOW_TITLE, '-heading', GUI_HEADING, '-icon', GUI_ICON, '-description', GUI_MESSAGE, '-button1', GUI_BUTTON, '-showDelayOptions', ' '.join(GUI_DEFER_OPTIONS), '- '] error_values = ['2', '3', '239', '243', '250', '255'] # Instead of returning an error code to stderr, jamfHelper always returns 0 # and possibly returns an 'error value' to stdout. This makes it somewhat # spotty to check for some deferrment values including 0 for 'Start Now'. # The return value is an integer, so leading zeroes are dropped. Selecting # 'Start Now' should technically return '01'; instead, only '1' is returned # which matches the 'error value' for 'The Jamf Helper was unable to launch' # All we can do is make sure the subprocess doesn't raise an error, then # assume (yikes!) a return value of '1' equates to 'Start Now' try: proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) out, err = proc.communicate() # Check that the return value does not represent an 'error value' if not out in error_values: # Special case for 'Start Now' which returns '1' if out == '1': return 0 else: return int(out[:-1]) else: return None except: # Catch possible CalledProcessError and OSError print "An error occurred when displaying the user prompt." count = 0 return None count = 0 while True: count += 1 display_prompt() if str(count) in GUI_DEFER_OPTIONS: for x in range(1, loopTimes + 1): def display_prompt() breakRight now I have it below the def display_prompt() function with a break :) however it just does the update after I select the 5 min deferral option. It does not re-prompt with 2 4 & 8 hours + the Start Now option.